当前位置: 首页 > article >正文

linprog函数在octave中的使用

octive可以用一个比较好的网站使用:

Octave Online

进入正题:

linprog 函数是matlab中求解线性规划问题所常用到的一个函数,它在octave中仍然适用,接下来就从一个具体的线性规划例子中看它是如何运用的。

	在这里补充一下,线性规划是数学规划的一个分支,是研究线性约束条件下线性目标函数的极值问题的数学理论和方法,解决线性规划问题,要标明决策变量,约束条件,目标函数三个要素,从而建立模型解决问题。

例题:
在这里插入图片描述

在这个问题中我们设 xi (i=1,2) 为甲乙两个机床的每日生产量,其中 xi 就是决策变量。

根据题意列出约束条件:
{ 2 x 1 + x 2 ⩽ 10 , x 1 + x 2 ⩽ 8 , x 2 ⩽ 7 , x i ⩾   0 , ( i = 1 , 2 ) \left\{ \begin{matrix} 2 x_1+x_2\leqslant10 , \\ x_1+x_2\leqslant8, \\ x_2\leqslant7, \\ x_i \geqslant \ 0,(i=1,2) \end{matrix} \right. 2x1+x210,x1+x28,x27,xi 0,i=1,2

此时可以建立数学模型:
m a x z = 4 x 1 + 3 x 2 maxz =4x_1+3x_2 maxz=4x1+3x2
s . t . = { 2 x 1 + x 2 ⩽ 10 , x 1 + x 2 ⩽ 8 , x 2 ⩽ 7 , x i ⩾   0 , ( i = 1 , 2 ) s.t.= \left\{ \begin{matrix} 2 x_1+x_2\leqslant10 , \\ x_1+x_2\leqslant8, \\ x_2\leqslant7, \\ x_i \geqslant \ 0,(i=1,2) \end{matrix} \right. s.t.= 2x1+x210,x1+x28,x27,xi 0,i=1,2
其中, s . t . s.t. s.t. (subject to) 表示“受约束为”

建立完数学模型后,,就可以用linprog函数进行解答了
linprog的一般形式为:
[ x , f v a l ] = l i n p r o g ( f , a , b , A e q , B e q , l b , u b ) [x,fval] =linprog(f,a,b,Aeq,Beq,lb,ub) [x,fval]=linprog(f,a,b,Aeq,Beq,lb,ub)

对应的数学模型为:

寻找x使得
m i n ( f T x ) min(f^Tx) min(fTx)
s . t . = { a ⋅ x ⩽ b , A e q ⋅ x = B e q , l b ⩽ x ⩽ u b s.t.= \left\{ \begin{matrix} a\cdot x\leqslant b, \\ Aeq \cdot x=Beq, \\ lb\leqslant x\leqslant ub \end{matrix} \right. s.t.= axb,Aeqx=Beq,lbxub
其中x是返回决策向量的取值,fval是返回目标函数的最优值,f为价值向量,a,b是对应线性不等式约束,Aeq和Beq是对应线性等式约束,lb和ub分别对应决策向量的下界向量和上界向量,要注意的是在MATLAB中求解线性规划标准形式为求最小值,所以如果求最大值只需进行变号,变不等式方向即可。

在octave中运用linprog函数时需要先调用,要用pkg load optim来调用。

此时对 f , a , b , A e q , B e q , l b , u b f,a,b,Aeq,Beq,lb,ub f,a,b,Aeq,Beq,lb,ub赋值

根据不等式得
4 x 1 + 3 x 2 4x_1+3x_2 4x1+3x2的最小值,则
f = f= f= [ 4 ; 3 ] \begin{bmatrix} 4;3\\ \end{bmatrix} [4;3]
a = a= a= [ 2 , 1 ; 1 , 1 ; 0 , 1 ] \begin{bmatrix} 2,1;1,1;0,1\\ \end{bmatrix} [2,1;1,1;0,1]
b = b= b= [ 10 , 8 , 7 ] \begin{bmatrix} 10,8,7\\ \end{bmatrix} [10,8,7]

a , b a,b a,b 中一个分号表示一个对应式子

由于此题没有等式限制,则 A e q = B e q = [ ] Aeq=Beq=[ ] Aeq=Beq=[]

l b = [ 0 , 0 ] lb=[0,0] lb=[0,0]
u b = [ 10000 , 10000 ] , ub=[10000,10000], ub=[10000,10000], ub可以根据题意修改,这里是随便的一个数,

最后求的fval是最小值,所以要求反得到最大值

clear
c=[4;3]
b=[10;8;7]
a=[2,1;1,1;0,1]
lb=zeros(2,1)//21列为0
ub=[10000;10000]
[x,FVAL]=linprog(-c,a,b,[ ],[ ],lb,ub)
y=-FVAL

结果加求反为
在这里插入图片描述
在这里插入图片描述
则答案为 x 1 = 2 , x 2 = 6 x_1=2,x_2=6 x1=2,x2=6
最大利润为 − F V A L = 26 -FVAL=26 FVAL=26


http://www.kler.cn/a/388458.html

相关文章:

  • More Effective C++之效率Efficiency_下
  • kubernates实战
  • Windows下安装Rabbit MQ
  • FFmpeg在python里推流被处理过的视频流
  • python+reportlab创建PDF文件
  • 数据结构之栈,队列,树
  • WPF中ImageBrush和Image的区别
  • 斐波那契数的第n个数代码分享(c基础)
  • 【如何使用 ADB 脚本批量停止 Android 设备上的所有应用】
  • 基于WebService的面向服务架构研究
  • 浅谈“通感一体”
  • el-table 表格索引不展示问题
  • Golang | Leetcode Golang题解之第556题下一个更大元素III
  • Facebook定位不准是什么原因?
  • 零基础入门进程间通信:task 1(匿名管道与vscode使用)
  • JS如何读取JSON数据并且格式化解析?
  • 京准同步:GPS北斗卫星授时服务器发展趋势介绍
  • javascript中的 fetch API和 $.ajax API
  • 24年11月架构考试题里的两道小学数学题
  • ⭐SmartControl: Enhancing ControlNet for Handling Rough Visual Conditions
  • 使用Go语言编写一个简单的NTP服务器
  • 《重学Java设计模式》之 建造者模式
  • 第三十八章 章节练习之面经页面
  • (一)<江科大STM32>——软件环境搭建+新建工程步骤
  • conda 启动时添加执行脚本
  • 优化布线拥塞