使用fmincon违反步长容差

时间:2016-07-15 08:28:24

标签: matlab optimization constraints quadratic-programming

我正在尝试使用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();
    }
}

0 个答案:

没有答案