蒙特卡洛模型——有约束的非线性规划问题

蒙特卡洛模型——有约束的非线性规划问题

题目:

例:求 f ( x ) = x 1 ⋅ x 2 ⋅ x 3 的最大值 s . t { − x 1 + 2 x 2 + 2 x 3 ⩾ 0 x 1 + 2 x 2 + 2 x 3 ⩽ 72    10 ⩽ x 2 ⩽ 20    x 1 − x 2 = 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)=x1x2x3的最大值s.tx1+2x2+2x30x1+2x2+2x37210x220x1x2=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:n
    x=[x1(i),x2(i),x3(i)];
    if  -x(1)+2*x(2)+2*x(3)>=0 && x(1)+2*x(2)+2*x(3)<=72
        result=x(1)*x(2)*x(3);
        if result>fmax
            fmax=result;
            X=x;
        end
    end
end
disp(['蒙特卡洛模拟的结果为:',num2str(fmax)]);
disp(['此时x1,x2,x3的值为',num2str(X)]);
toc

代码输出结果

我用一个表格来表示这次求出来的结果

类型Value
最大值3445.5138
x122.6222
x212.6222
x312.0666

收获与心得

在求解非线性规划的问题时,我们还可以通过蒙特卡洛方法来解决,我们可以对比两次的结果几乎差不多,尤其是在蒙特卡洛模拟次数n较大时,模拟的结果更加贴近现实。还有为了提高结果的运算过程和精度,我们可以通过缩小随机生成变量的范围来实现,大家还可以通过for循环来优化算法。还有蒙特卡洛算法具有随机性,所以每一次的结果有差异,但是差异可以忽略,结果几乎差不多。
刚开始写博客,作为一名预备码农,数理爱好者,希望和广大数模爱好者、matlab爱好者等交流、分享学习过程,共同进步!

  • 5
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值