diff --git "a/\350\257\276\344\273\266/0613Simplex Method\344\270\216LP\345\256\236\346\210\230/lpsolve.py" "b/\350\257\276\344\273\266/0613Simplex Method\344\270\216LP\345\256\236\346\210\230/lpsolve.py" new file mode 100644 index 0000000..86d19ce --- /dev/null +++ "b/\350\257\276\344\273\266/0613Simplex Method\344\270\216LP\345\256\236\346\210\230/lpsolve.py" @@ -0,0 +1,49 @@ +''' +原题目: +有2000元经费,需要采购单价为50元的若干桌子和单价为20元的若干椅子,你希望桌椅的总数尽可能的多,但要求椅子数量不少于桌子数量,且不多于桌子数量的1.5倍,那你需要怎样的一个采购方案呢? +解:要采购x1张桌子,x2把椅子 + +max z= x1 + x2 +s.t. x1 - x2 <= 0 +1.5x1 >= x2 +50x1 + 20x2 <= 2000 +x1, x2 >=0 + +在python中此类线性规划问题可用lp solver解决 +scipy.optimize._linprog def linprog(c: int, + A_ub: Optional[int] = None, + b_ub: Optional[int] = None, + A_eq: Optional[int] = None, + b_eq: Optional[int] = None, + bounds: Optional[Iterable] = None, + method: Optional[str] = 'simplex', + callback: Optional[Callable] = None, + options: Optional[dict] = None) -> OptimizeResult + +矩阵A:就是约束条件的系数(等号左边的系数) +矩阵B:就是约束条件的值(等号右边) +矩阵C:目标函数的系数值 +''' + +from scipy import optimize as opt +import numpy as np +#参数 +#c是目标函数里变量的系数 +c=np.array([1,1]) +#a是不等式条件的变量系数 +a=np.array([[1,-1],[-1.5,1],[50,20]]) +#b是是不等式条件的常数项 +b=np.array([0,0,2000]) +#a1,b1是等式条件的变量系数和常数项,这个例子里无等式条件,不要这两项 +#a1=np.array([[1,1,1]]) +#b1=np.array([7]) +#限制 +lim1=(0,None) #(0,None)->(0,+无穷) +lim2=(0,None) +#调用函数 +ans=opt.linprog(-c,a,b,bounds=(lim1,lim2)) +#输出结果 +print(ans) + +#注意:我们这里的应用问题,椅子不能是0.5把,所以最后应该采购37把椅子 +