简介

假设目标函数落在高值区的概率分别为0.01,0.00001,则当计算\(10^6\)个点之后至少有一个点能落在高值区的概率分别是

\[1 - 0.99^{1000000} = 0.9999999(100+)99 \]

\[1 - 0.99999^{1000000} = 0.999954602 \]


上面就是蒙特卡洛解整数规划的重点。如果不是整数那几乎不能枚举。

code

rand('state', sum(clock)); % 初始化随机数发生器
p0 = 0;
tic % 计时开始
for i=1:10^6
    x = randi([0,99],1,5); % 产生一行五列的区间[0,99]上的随机整数
    [f,g] = mente(x);
    if all(g <= 0)
        if p0 < f
            x0=x;p0 = f; %记录下当前较好的值
        end
    end
end
disp('最优位置 & 最优值')
x0, p0
toc % 计时结束
function[f,g] = mente(x);
f=x(1)^2 + x(2)^2 + 3 * x(3)^2 + 4 * x(4)^2 + 2*x(5)^2-8*x(1) - 2* x(2) - 3*x(3) -x(4) - 2 * x(5); % 求f 的最大值 同时 g 中所有元素要满足小于0
g = [
sum(x) - 400
x(1) + 2 * x(2) + 2 * x(3) + x(4) + 6 * x(5) - 800
2 * x(1) + x(2) + 6 * x(3) - 200
x(3) + x(4) + 5 * x(5) - 200
];
posted on 2020-08-05 16:11  HDU李少帅  阅读(908)  评论(0编辑  收藏  举报