网站首页 > 技术教程 正文
蒙特卡洛方法是一种利用计算机的随机数理论模拟实际的情况的一种方法。今天主要是以实例讲解蒙特卡洛方法的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\n',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\n',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\n',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\n',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小时内删除。
作 者 | 郭志龙
编 辑 | 郭志龙
校 对 | 郭志龙
猜你喜欢
- 2024-11-06 关于几种熵的计算(MATLAB)(matlab熵值法求权重)
- 2024-11-06 Python与Matlab画图的代码对比(matlab跟python)
- 2024-11-06 「话说嵌入式」STM32控制算法验证之Matlab PIL
- 2024-11-06 基于BP神经网络的QPSK解调算法matlab性能仿真
- 2024-11-06 基于MATLAB的ACC控制算法设计及仿真测试
- 2024-11-06 「一」MATLAB语言之常见函数及符号运算
- 2024-11-06 基于无线传感器网络的MCKP-MMF算法matlab仿真
- 2024-11-06 基于最小二乘递推算法的系统参数辨识matlab仿真
- 2024-11-06 「话说嵌入式」STM32算法的翅膀之MATLAB
- 2024-11-06 K均值聚类算法-Matlab代码(k均值聚类算法过程)
你 发表评论:
欢迎- 最近发表
-
- Win11学院:如何在Windows 11上使用WSL安装Ubuntu
- linux移植(Linux移植freemodbus)
- 独家解读:Win10预览版9879为何无法识别硬盘
- 基于Linux系统的本地Yum源搭建与配置(ISO方式、RPM方式)
- Docker镜像瘦身(docker 减小镜像大小)
- 在linux上安装ollama(linux安装locale)
- 渗透测试系统Kali推出Docker镜像(kali linux渗透测试技术详解pdf)
- Linux环境中部署Harbor私有镜像仓库
- linux之间传文件命令之Rsync傻瓜式教程
- 解决ollama在linux中安装或升级时,通过国内镜像缩短安装时长
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)