基础线性规划实现(matlab,lingo)

目录

一、本次所需解的问题

 二、matlab解题

1)语法

2)数学思维

3)matlab解题

运行结果:

三、lingo解题

lingo解题如下:

运行结果:

最后:


一、本次所需解的问题

      需解出下面该线性规划问题对应的最大值z以及x1,x2,x3

 二、matlab解题

1)语法

我们使用linprog函数,这是专门解决线性规划问题的,我们来看一看该函数的语法:

 具体含义是什么呢?似乎你还看不懂这个,因此我用中文来说一下我们主要用到的部分:

x = linprog(f,A,b) 求解 min f'*x 约束条件为 A*x ≤ b.
x = linprog(f,A,b,Aeq,beq) 求解上述问题,但是增加了约束条件,即将: Aeq*x = beq. 如果没有等式存在可以用:A = [] and b = [] 
x = linprog(f,A,b,Aeq,beq,lb,ub) 定义变量x的下界lb和上街ub,使得x始终在该范围内,即lb ≤ x ≤ ub。若没有约束条件,则设: Aeq = [] and beq = [] 

2)数学思维

我们的数学公式拿下来看看,看着我们对比着写代码:
目标函数:

max z=2x1+3x2-5x3

约束条件:

x1+x2+x3=7;
2x1-5x2+x3>=10;
x1+3x2+x3<=12
x1,x2,x3>0

至于从数学角度来看,emmmm,我们还是直接上代码吧!

3)matlab解题

强调: 在这里我需要说明的是,求解max=cx在matlab中就是min=-cx,记住有个负号!

因此matlab代码:

%打卡第一天
clear all
clc
c=[2 3 -5];%用系数确定目标函数
a=[-2,5,-1;1,3,1]; %第二个函数全部取反保证方向一致
b=[-10;12];%右边的值10编程-10
aeq=[1,1,1];%等式系数单独拎出来
beq=7;%等式只有一个,结果为7
lb=[0;0;0];%没有下限
ub=[inf;inf;inf];%没有上限
[x,fval]=linprog(-c,a,b,aeq,beq,lb,ub);
x
best=c*x%计算最优值

运行结果:

 因此最优解x1 =6.4286,x2=0.5714,x3=0,最优值为14.5714

三、lingo解题

强调: 在这里我需要说明的是,求解max z=cx在lingo中就是min=cx,且lingo默认变量>=0,每次输入一段代码结束后需加“;”分号才可以,不然会报错!!!

lingo解题如下:

max=2*x1+3*x2-5*x3;
x1+x2+x3=7;
2*x1-5*x2+x3>=10;
x1+3*x2+x3<=12;

运行结果:

 Objective value(最优值):  14.57143

最优解x1 =6.428571,x2=0.5714286,x3=0

row:为具体解题过程,我们其实并不需要看这些,只需要知道最优解,最优值是什么就好!

最后:

本次学习到此结束,如有不足之处,希望大家多多指点,感谢!!!   

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MATLABLINGO都是用来解决线性规划问题的工具。下面我们以一个具体的例题来说明如何在MATLABLINGO求解线性规划问题。 假设有一个农场,农场有限的土地可以用于种植两种作物:小麦和玉米。现在农场主希望决定如何分配土地才能使得总产量最大化。已知每亩小麦的产量为 5 个单位,每亩玉米的产量为 10 个单位。此外,农场总共有100亩土地可供使用,小麦的最大种植面积为80亩,而玉米的最大种植面积为90亩。其,小麦和玉米的种植不能超过总土地面积。 在LINGO,我们可以使用以下语句来求解这个线性规划问题: ``` SETS: CROPS /WHEAT, CORN/; DATA: SIZES(CROPS) = 100; MAX_ACRE(CROPS) = 80, 90; YIELD("WHEAT") = 5; YIELD("CORN") = 10; VARIABLES: ACRES(CROPS) >= 0; OBJECTIVE: MAX = YIELD("WHEAT") * ACRES("WHEAT") + YIELD("CORN") * ACRES("CORN"); CONSTRAINTS: CONSTRAINT1: ACRES("WHEAT") + ACRES("CORN") <= SIZES("CROPS"); CONSTRAINT2: ACRES("WHEAT") <= MAX_ACRE("WHEAT"); CONSTRAINT3: ACRES("CORN") <= MAX_ACRE("CORN"); END ``` 在MATLAB,我们可以使用优化工具箱的`linprog`函数来求解这个线性规划问题。具体的MATLAB代码如下: ```matlab f = [-5; -10]; A = [1 1; 1 0; 0 1]; b = [100; 80; 90]; lb = [0; 0]; ub = []; x = linprog(f, A, b, [], [], lb, ub); ``` 在LINGO,可以得到结果:小麦种植面积为75亩,玉米种植面积为25亩,总产量为625个单位。 在MATLAB,可以得到结果:小麦种植面积为75亩,玉米种植面积为25亩,总产量为625个单位。 通过以上两种工具的使用,我们可以看到无论是使用MATLAB还是LINGO,都可以很方便地求解线性规划问题,并得到最优解。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值