天天看點

整數規劃蒙特卡洛模拟(Matlab實作)

目錄

​​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%計時結束      

4 展望與總結

繼續閱讀