Stats

Popular Posts

Followers

Mathematica 教學:Transform problem to Standard form in Simplex Method

戴忠淵 於 2013年9月19日星期四 下午2:28 發表

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]
Tags: , ,

讀者回應 ( 0 意見 )

發佈留言

Please leave your name and tell me what you thought about this site. Comments, suggestions and views are welcomed.

如果這篇文章對你有幫助,那請留個訊息給我~