下面是我的一些代码。这是一个优化代码,我正在努力写下我在哪里写 * 。为了忽略我已经计算过的点,我可以在那里写一些代码吗?
do {
// save the current value
oldValue = value;
maxValue = oldValue; // set the maxValue for the local search to be the current value
// now look around the current point to see if there's a better one nearby
for ( int i = -1; i <= 1; i++ ) {
for ( int j = -1; j <= 1; j++ ) {
// this gives 9 points including the current point (when i=0, j=0)
if ( i==0 && j==0 ) {
*********************************
}
else {
newValue = cost(lat + step * i, longi + step * j); // value at neighbouring point
if ( newValue <= maxValue ) { // is it bigger than maxValue?
// yes so set maxValue and save point i,j values
dlat = i;
dlongi = j;
maxValue = newValue;
}
}
}
}
// update lat and longi to new point with lower 'value'
lat += step * dlat;
longi += step * dlongi;
value = maxValue;
//writes out
//cout << iteration << " : " << lat << "," << longi << " : " << value << "\n";
iteration++; // add one to the iteration counter
}
答案 0 :(得分:3)
您只需删除if ( i==0 && j==0 )
即可,因为您无需将该点与自身进行比较。将else
替换为if(i!=0 || j!= 0)
。
请注意,您的代码会受到本地最大值的影响。
答案 1 :(得分:0)
您应该删除for循环并使用-1,0,1或其直接组合的任何组合。
答案 2 :(得分:0)
你正试图找到最低限度,对吗?你想要设置 dlat和dlong到最小值和maxvalue的坐标 达到最小值。 (也许变量应该重命名? 变量extremalValue可能更好。)所以,如果点(0,0) 是你的极值,你不想做任何事情 已经有了答案。如果不是,你不想做任何事, 因为当你找到时,你会改变dlat,dlong和maxvalue 真正的极值。所以,只需要在那里放一个大而胖的分号。
或者编写循环以使测试为“if(i!= 0或j!= 0)”。
(你知道令牌“或”等同于“||”吗?我知道了 曾经,但我忘记了,只是重新解读它。一样的 用“和”和“&amp;&amp;”。此外,用户定义的数字文字是 老板。)