目錄
1 蒙特卡洛模拟和整數規劃
2 案例
3 Matlab實作
4 展望與總結
1 蒙特卡洛模拟和整數規劃
(1)随機模拟方法也稱為Monte Caro(孟特卡羅)方法,蒙特卡洛又稱随機抽樣或統計試驗,就是産生随機變量,帶入模型算的結果,是一種基于“随機數”的計算方法。這一方法源于美國在第二次世界大戰中研制原子彈的“曼哈頓計劃”。該計劃的主持人之一,數學家,馮-諾依曼用馳名世界的賭城—摩納哥的Monte Caro來命名這種方法,為他蒙上神秘的面紗。
(2)我前面已經分享過蒙特卡洛模拟和整數規劃分别用Python實作。
(3)尋優方面,隻要模拟次數夠多,最終是可以找到最優解或接近最優的解。如果是整數規劃問題(變量為整數),那麼就不必用優化算法,就簡單的蒙特卡洛模拟就行。
2 案例
目标函數:求函數的最大值。限制條件:![]()
整數規劃蒙特卡洛模拟(Matlab實作) ![]()
整數規劃蒙特卡洛模拟(Matlab實作) ![]()
整數規劃蒙特卡洛模拟(Matlab實作) ![]()
整數規劃蒙特卡洛模拟(Matlab實作) ![]()
整數規劃蒙特卡洛模拟(Matlab實作) 是整數![]()
整數規劃蒙特卡洛模拟(Matlab實作)
3 Matlab實作
clear
clc
rand('state',sum(clock)); %産生非重複随機數
%設定該指令是因為每次産生随機數的時候,随機數生成器觸發器的狀态都會翻轉一次。
%matlab生成的随機數是僞随機數,是以可生成時間相關的随機數,總之和目前時間相關。
%如果計算機運算太快的話,可能會生成相同随機數
p0=0; %p0為函數最大值
tic%計時開始
for i=1:10^7%隻要次數夠高,最後肯定是實際的最優值
x=randi([0,99],1,3);%産生一行三列的區間在【0,99】上的随機整數
f=2*x(1)+3*x(1)^2+3*x(2)+x(2)^2+x(3);%主函數
g=[x(1)+2*x(1)^2+x(2)+2*x(2)^2+x(3)
x(1)+x(1)^2+x(2)+x(2)^2-x(3)
2*x(1)+x(1)^2+2*x(2)+x(3)
x(1)+2*x(2)];%條件
if g(1,1)<=100&&g(2,1)<=500&&g(3,1)<=400&&g(4,1)>=10
if p0<f%如果求最小值,則将if p0<f中的<改成>符号
x0=x;
p0=f;%記錄目前較好的解
end
end
end
x0%x0為x1,x2,x3的值
p0%p0為函數最大值
toc%計時結束