我正在尝试使用MatLab的fmincon函数和SQP算法来解决非线性约束优化问题。正如我在文献研究中发现的那样,这个求解器已成功应用于我的问题。
我知道我的问题的解决方案,但fmincon努力找到它可靠。当在我的边界内随机生成的起始值运行100次优化时,我得到了大约40%的好结果。 'good'意味着结果接近我接受的最佳结果,尽管那些'好'的结果与不同的ExitFlags相对应。最常见的是退出标志-2和2:
SELECT COUNT(*) FROM (your query here)
“非良好”结果偏离最佳解决方案的约2%,并且对应于ExitFlags 2和-2。
我玩了宽容,但没有成功。当放宽约束容差时,ExitFlag -2的数量减少,一些ExitFlag 1出现,但因此与最优解的偏差上升。
一个大问题似乎是违反其容忍度的步长。由于步长太小/步长的规范(X的相对变化低于TolX),解算器经常在2或3次迭代后退出。是否有办法抵消这些问题?我想调整求解器In以获得可靠的结果。
有关您的信息,请使用以下选项:
import java.util.Scanner;
public class Program {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long n = sc.nextLong();
long sum = 0;
for (int firstBitIndex = 0; firstBitIndex < 64; firstBitIndex++) {
long firstBit = 1L << firstBitIndex;
if (firstBit >= n)
break;
for (int secondBitIndex = firstBitIndex + 1; secondBitIndex < 64; secondBitIndex++) {
long value = firstBit | (1L << secondBitIndex);
if (value > n)
break;
sum += value;
}
}
System.out.println(sum % 1000000007);
sc.close();
}
}