原创 MATLAB使用蒙特卡洛算法实例求解线性规划-ai全自动剪辑软件

2023-04-10 17:41:05

 

原标题: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\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小时内删除。

作 者 | 郭志龙

编 辑 | 郭志龙

校 对 | 郭志龙返回搜狐,查看更多

责任编辑:


以上就是关于《原创 MATLAB使用蒙特卡洛算法实例求解线性规划-ai全自动剪辑软件》的全部内容,本文网址:https://www.7ca.cn/baike/15354.shtml,如对您有帮助可以分享给好友,谢谢。
标签:
声明

排行榜