目标函数,决策变量(x1,x2)以及约束条件 ——> 解决利润问题
linprog函数主要用来求线型规划中的最小值问题(最大值的镜像问题,求最大值只需要加个“-”)
有可行解也有最优解 主要找到那个最优解(单一的)。
matlab编程计算
等式约束:
aeq=[1,1,1];
beq=7;
若没有则为空。
不等式约束:
A:不等式约束条件矩阵
b:对应不等式右侧的矩阵
结果:
“x”即目标函数取最大值时x1、x2的取值,“fval"即最小值。
例题:
f = [2;3;-5];
A = [-2,5,-1;1,-3,-1];
b = [-10;12];
lb = [0,0,0];aeq=[1,1,1];beq=7;
[ x , fval ] = linprog( -f , A , b , aeq , beq , lb , []);
disp(x)
disp(-fval)
凡是没有的,如ub用[]代替。
求最大值,首先要把目标函数转化为最小值,即min z = - (2x+3y);
要把大于等于转换为小于等于,即在有 “≥” 符号式子两边同时乘以-1;
Python:
import numpy as np
from scipy.optimize import linprog
c = np.array([2, 3, 1])
A_up = np.array([[-1, -4, -2], [-3, -2, 0]])
b_up = np.array([-8, -6])
r = linprog(c, A_ub=A_up, b_ub=b_up, bounds=((0, None), (0, None), (0, None)))
print(r)
针对这道题:matlab与python求出来的值并不一样:
当matlab遇到这个问题时:
linprog stopped because there is no solution to the linear programming problem. For any target value there are feasible points with objective value smaller than the target.
翻译一下是:linprog停止了,因为线性规划问题没有解决方案。对于任何目标值,都有客观值小于目标的可行点。
再通俗一点就是有无数种解!应该是限制条件少了!
带绝对值的非线性规划转为线性规划: