zoukankan      html  css  js  c++  java
  • Matlab解决线性规划问题

    线性规划问题的实例与定义

    某机床厂生产甲、乙两种机床,每台销售后的利润分别为 4000 元与 3000 元。 生产甲机床需用 A、 B机器加工,加工时间分别为每台 2 小时和 1 小时;生产乙机床需用A 、B、C三种机器加工,加工时间为每台各一小时。若每天可用于加工的机器时 数分别为 A机器 10 小时、B 机器 8 小时和C 机器 7 小时。问该厂应生产甲、乙机床各几台,才能使总利润最大?

    上述问题的数学模型:设该厂生产x1台甲机床和x2乙机床时总利润z最大,则 x1,x2应满足

    [max z=4000x_1+3000x_2\ s.t.= egin{cases} 2x_1+x_2le10,\ x_1+x_2le8,\ x_2le7,\ x_1,x_2ge0. end{cases} ]

    其中:变量x1,x2称为决策变量。max表达式称为问题的目标函数,下面的不等式是问题的约束条件,记为s.t.(即subject to)。由于上面的目标函数及约束条件均为线性函数,故称为线性规划问题。

    总之,线性规划问题是在一组线性约束条件的限制下,求一线性目标函数最大或最小的问题。

    线性规划的Matlab标准形式及软件求解

    线性规划的目标函数可以是求最大值也可以是求最小值,约束条件的不等号可以是小于等于也可以是大于等于。为了避免这种形式多样性带来的不便,Matc lab中规定线性规划的标准形式为

    [min f^Tx\ s.t.=egin{cases} Asdot xle b,\ Aeqsdot x=beq,\ lble xle ub.\ end{cases} ]

    其中:f,x,b,beq,lb,ub为列向量,A,Aeq为矩阵。

    调用形式

    [x,fval]=linprog(f,A,b,Aeq,beq,lb,ub) %求最小值
    [x,fval]=linprog(-f,A,b,Aeq,beq,lb,ub)%求最大值
    

    输入变量

    • f为目标函数中的价值系数向量(注意如果要去求最大值,则全部加负号求最小值)
    • A为不等式约束系数矩阵
    • b为不等式右端常数向量
    • Aeq为等式约束系数矩阵
    • beq为等式右端常数向量
    • lb 为决策变量下界向量
    • ub为决策变量上界向量

    在调用时,输入参数不存在时,可以将其输入用[]空矩阵表示

    输出变量

    • x为最优解
    • fval为最优目标值

    具体实例

    • 目标函数与约束条件

    [max z=2x_1+3x_2-5x_3\ s.t.=egin{cases}x_1+x_2+x_3=7,\2x_1-5x_2+x_3ge10,\x_1+3x_2+x_3le12,\x_1,x_2,x_3ge0. end{cases} ]

    • Matlab程序
    f=[2;3;-5];
    A=[1,1,1];
    b=7;
    A=[-2,5,-1;1,3,1];
    b=[-10;12];
    Aeq=[1,1,1];
    beq=7;
    lb=zeros(3,1);%创建一个3X1的零矩阵 lb=[0,0,0]也可以
    [x,y]=linprog(-f,A,b,Aeq,beq,lb,[]);
    x,y=-y
    
    • 运行结果
    Optimal solution found.
    
    
    x =
    
       6.4286
       0.5714
            0
    
    
    y =
    
      14.5714
    
  • 相关阅读:
    一段获取windows环境变量的代码
    尝试word2007的blog发布
    如何求一表所有行所有字段实际占用的空间
    如何查询全表扫描SQL
    Oracle 33个等待事件
    如何使用RMAN
    如何使用Diagnostics工具监控应用服务器
    如何查询每行数据的数据块信息
    如何理解recursive calls,db block gets和consistent gets
    如何编写批处理与SQLPLUS(例子)
  • 原文地址:https://www.cnblogs.com/yuuuuu422/p/13194923.html
Copyright © 2011-2022 走看看