蒙特卡洛模型——有约束的非线性规划问题
蒙特卡洛模型——有約束的非線性規劃問題
題目:
例:求f(x)=x1?x2?x3的最大值s.t{?x1+2x2+2x3?0x1+2x2+2x3?7210?x2?20x1?x2=10\text{例:求}f\left( x \right) =x_1\cdot x_2\cdot x_3\text{的最大值} \\ s.t\begin{cases} -x_1+2x_2+2x_3\geqslant 0\\ x_1+2x_2+2x_3\leqslant 72\\ \,\, 10\leqslant x_2\leqslant 20\\ \,\, x_1-x_2=10\\ \end{cases} 例:求f(x)=x1??x2??x3?的最大值s.t???????????x1?+2x2?+2x3??0x1?+2x2?+2x3??7210?x2??20x1??x2?=10?
蒙特卡洛模型的思路:
1.求變量受限的大致范圍;
2.在上述的范圍中用隨機數生成若干組實驗點,先驗證是否滿足所有約束條件。若滿足則將其劃分到行組,再從組中找到的函數的最大值(最小值)。
matlab代碼部分
蒙特卡洛模擬實現代碼
clc;clear tic n=10000000; x1=unifrnd(20,30,n,1); x2=x1-10; x3=unifrnd(-10,16,n,1); fmax=-inf; for i=1:nx=[x1(i),x2(i),x3(i)];if -x(1)+2*x(2)+2*x(3)>=0 && x(1)+2*x(2)+2*x(3)<=72result=x(1)*x(2)*x(3);if result>fmaxfmax=result;X=x;endend end disp(['蒙特卡洛模擬的結果為:',num2str(fmax)]); disp(['此時x1,x2,x3的值為',num2str(X)]); toc代碼輸出結果
我用一個表格來表示這次求出來的結果
| 最大值 | 3445.5138 |
| x1 | 22.6222 |
| x2 | 12.6222 |
| x3 | 12.0666 |
收獲與心得
在求解非線性規劃的問題時,我們還可以通過蒙特卡洛方法來解決,我們可以對比兩次的結果幾乎差不多,尤其是在蒙特卡洛模擬次數n較大時,模擬的結果更加貼近現實。還有為了提高結果的運算過程和精度,我們可以通過縮小隨機生成變量的范圍來實現,大家還可以通過for循環來優化算法。還有蒙特卡洛算法具有隨機性,所以每一次的結果有差異,但是差異可以忽略,結果幾乎差不多。
剛開始寫博客,作為一名預備碼農,數理愛好者,希望和廣大數模愛好者、matlab愛好者等交流、分享學習過程,共同進步!
總結
以上是生活随笔為你收集整理的蒙特卡洛模型——有约束的非线性规划问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: opendrive简介
- 下一篇: 尔雅计算机基础答案山大,大学计算机基础2