简介
假设目标函数落在高值区的概率分别为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
];