MATLAB使用蒙特卡洛算法实例求解线性规划
蒙特卡洛方法是一种利用计算机的随机数理论模拟实际的情况的一种方法。今天主要是以实例讲解蒙特卡洛方法的MATLAB编程实现求解线性规划。
实例1
首先使用linprog线性规划求解函数对该线性规划进行求解,该函数的语法如下: x = linprog(f,A,b) x = linprog(f,A,b,Aeq,beq) x = linprog(f,A,b,Aeq,beq,lb,ub) x = linprog(f,A,b,Aeq,beq,lb,ub,options) x = linprog(problem) [x,fval] = linprog(___) [x,fval,exitflag,output] = linprog(___) [x,fval,exitflag,output,lambda] = linprog(___) 其中f,A,b,是不可缺省的输入变量, x是不可缺省的输出变量,它是问题的解.vlb,vub均是向量, 分别表示x的下界和上界,x0为x的起始点, options为optimset函数中定义的参数的值,fval是目标函数在 解x处的值。
程序 clc; clear all; close all; c = [2;3;1]; a = [1, 4,2;3,2,0]; b = [8;6]; [x,y] = linprog(c,-a,-b,[],[],zeros(3,1)); fprintf("min f(x) 在x1 = %f x2 = %f x3 = %f处取得最小值:%f ",x(1),x(2),x(3),y);
运行结果 Optimal solution found. min f(x) 在x1 = 2.000000 x2 = 0.000000 x3 = 3.000000处取得最小值:7.000000 >>
蒙特卡洛求解线性规划程序
主程序 clc; clear all; rand("state",sum(clock));%初始化随机数发生器 f0=inf; x0 = []; num = 1e6; tic%计时开始 for i=1:num x=0 + 20*rand(3,1);%随机产生初始解 [f,g]=mengte1(x);%调用自定义函数计算 if sum(g<=0)==2 if f0>=f %求最小值 如果当前值更优,则更新值 x0=x; f0=f; end end end toc%计时结束 fprintf("min f(x) 在x1 = %f x2 = %f x3 = %f处取得最小值:%f ",x0(1),x0(2),x0(3),f0);
自定义函数mengte1.m function [f,g]=mengte1(x) %% f是目标函数 g(x)<=0 f=2*x(1)+3*x(2)+x(3); g=[-x(1)-4*x(2)-2*x(3)+8; -3*x(1)-2*x(2)+6]; end
运行结果 历时 0.954040 秒。 min f(x) 在x1 = 1.954169 x2 = 0.103206 x3 = 2.821145处取得最小值:7.039102
实例2
首先使用linprog线性规划求解函数对该线性规划进行求解:
程序 clc; clear all; c = [5;4;6]; a = [1,-1,1;3,2,4;3,2,0]; b = [20,42,30]; [x,y,exitflag,putput,lambda] = linprog(-c,a,b,[],[],zeros(3,1)); fprintf("min f(x) 在x1 = %f x2 = %f x3 = %f处取得最小值:%f ",x(1),x(2),x(3),y);
运行结果 Optimal solution found. min f(x) 在x1 = 0.000000 x2 = 15.000000 x3 = 3.000000处取得最小值:-78.000000
蒙特卡洛求解线性规划程序
主程序 clc; clear all; rand("state",sum(clock));%初始化随机数发生器 f0=inf; x0 = []; num = 1e6; tic%计时开始 for i=1:num x=0 + 30*rand(3,1);%随机产生初始解 [f,g]=mengte2(x);%调用自定义函数计算 if sum(g<=0)==3 if f0>=f %求最小值 如果当前值更优,则更新值 x0=x; f0=f; end end end toc%计时结束 fprintf("min f(x) 在x1 = %f x2 = %f x3 = %f处取得最小值:%f ",x0(1),x0(2),x0(3),f0);
自定义函数mengte2.m function [f,g]=mengte2(x) %% f是目标函数 g(x)<=0 f=-5*x(1)-4*x(2)-6*x(3); x1 = x(1); x2 = x(2); x3 = x(3); g=[x1-x2+x3-20; 3*x1+2*x2+4*x3-42; 3*x1+2*x2-30]; end
运行结果 历时 1.056990 秒。 min f(x) 在x1 = 0.201508 x2 = 14.099784 x3 = 3.280495处取得最小值:-77.08
参考内容
[1] 孙忠潇.Simulink仿真及代码生成技术入门到精通[M].北京:北京航空航天大学出版社,2015.
本文内容来源于网络,仅供参考学习,如内容、图片有任何版权问题,请联系处理,24小时内删除。
作 者 | 郭志龙
编 辑 | 郭志龙
校 对 | 郭志龙
李子柒要回来了?与资本达成和解,微念创始人退出,民间网红与资本之间的大战落幕在怒喷资本好手段并停更视频一年多后,网红顶流李子柒迎来了好消息,其与老东家微念之间的纠葛结束了。李子柒公司股权已变微念创始人卸任高管27日午间,卡着12点整,微念公众号发布消息称微
TWS真无线耳机销量预测2021年全球TWS市场出货量约3亿台,预计到2025年这一数字还将持续增长。SourceCounterpointTWSHearablesMarketTrackerEMS代工方面,
PS5太成功PSVR2销量预测能破1000万PS5的大获成功,也让不少业内的分析师更加看好即将推出的PSVR2。近日,科技公司Omdia的首席游戏分析师GeorgeJijiashvili预测,PSVR2将在第一年内售出160
展商风采丨长沙市湘行交通新能源有限公司E1馆,展位号W11602展商介绍长沙市湘行交通新能源有限公司成立于2015年11月,注册资本5100万元,是长沙交通投资控股集团有限公司的全资子公司,是湖南省充电基础设施协会副会
上海爷爷太敢穿了羽绒服短裤,看着觉得冷,实际很时髦对于上了年纪的爷爷们来说,冬天穿羽绒服更多的是为了保暖舒适,不冷就行。但是,往往这种穿衣理念容易出现一个问题有了温度,没了风度看着保暖,却不够时髦!虽说鱼和熊掌不能兼得,温度与风度
好斗的公鸡头条创作挑战赛童年是人生记忆中的第一缕阳光,是洁白心灵调色板上涂抹的五彩缤纷的色彩,是地平线那边的神秘世界,童年似漫天的繁星,每一颗都有着美好的回忆。童年系列(二)好斗的公鸡家里曾
赵相郭开,为何是秦国统一六国的最大功臣?秦王说他可抵十万大军要说秦国统一六国的最大功臣是谁?是商鞅?范雎?白起?王翦?李斯?还是吕不韦?不对!统统不对!此人正是赵国丞相秦国名将郭开。郭开,战国四大名将,不对,应该是战国五大名将之首,为什么这
战国七雄中,除了最终胜者秦国,也曾辉煌的其余六国是如何衰落的头条创作挑战赛战国时期,历经春秋三百年征战兼并,曾经分布各地的上百诸侯国,只剩下了十余个,其中尤以战国七雄(即秦魏韩楚燕齐赵)实力最强存续时间最长。七国之中,除了最终统一天下的秦国
入选2022北京网红打卡地推荐榜单,怀柔这个咖啡屋您来过吗?北京日报客户端实习记者张佳琪通讯员马伽本月中旬,北京市文化和旅游局启动2022年北京网红打卡地评选活动,评选出了100个新晋北京网红打卡地和100个提名推荐打卡地。怀柔区杨宋镇伴影
西江小镇访白坭白坭镇风光。西江从广东肇庆浩浩荡荡流淌而来,到了佛山三水,开始变得温文尔雅。宽阔的江面,对岸的北岭山脉和羚羊峡,一眼望去像水墨画。白坭,这个号称西江粮仓西江鱼舱的鱼米之乡,位于广东
2023年出现的这些变化与我们息息相关2022年即将过去,2023年马上就要到了,那么,2023年我们将会迎来哪些好的变化呢?一疫情的影响将消失随着我们疫情放开防控,在经历疫情肆虐的阵痛之后,预计最早从2023年二季度