LPNormalize[objective_,constrains_List]:= Block[{n1,n2,n3,myrule,slack,surplus,a,ss1,ss2,ss3,temp, basicvars,nonbasicvars}, myrule={slack[i_]:>ToExpression["slack"<>ToString[i]], surplus[i_]:>ToExpression["surplus"<>ToString[i]]}; n1=Length@constrains[[1]]; n2=Length@constrains[[2]]; n3=Length@constrains[[3]]; ss1=slack[#]&/@Range[n1]/.myrule; ss1=constrains[[1]][[All,1]]+ss1; ss2=slack[n1+#]&/@Range[n2]/.myrule; ss2=constrains[[2]][[All,1]]+ss2; ss3=-surplus[#]+slack[n1+n2+#]&/@Range[n3]/.myrule; ss3=constrains[[3]][[All,1]]+ss3; temp=Flatten@Select[{ss1,ss2,ss3},Length@#>0&]; nonbasicvars=Variables[Flatten[constrains][[All,1]]]; Coefficient[temp,#]&/@basicvars; nonbasicvars= Flatten@{nonbasicvars,surplus[#]&/@Range[n3]/.myrule}; basicvars=Flatten@{slack[#]&/@Range[n1+n2+n3]/.myrule}; {Flatten[{nonbasicvars,basicvars}],basicvars,nonbasicvars, Transpose[ Coefficient[Flatten[{ss1,ss2,ss3}],#]&/@ Flatten[{nonbasicvars,basicvars}]], Coefficient[objective,#]&/@Flatten[{nonbasicvars,basicvars}], Flatten[constrains][[All,2]],0}]
Usage:
LPNormalize[objective,{inequality constraints with "less than", equality constrains, inequality constraints with "greater than"}] Example obj=3x1+2x2+x3; constrains={{x1-x2+x3<=4,2x1+x2+3x3<=6,-x1+2x3<=3, x1+x2+x3<=8},{},{}}; LPNormalize[obj, constrains] LPNormalize[obj, constrains][[4]] // MatrixForm mySimplex@@LPNormalize[obj,constrains]
讀者回應 ( 0 意見 )
訂閱發佈留言 (Atom)
發佈留言
Please leave your name and tell me what you thought about this site. Comments, suggestions and views are welcomed.
如果這篇文章對你有幫助,那請留個訊息給我~