線型計画法

2変数の線形計画法の例です。

第1象限で,2つの直線 y=-1/2x+4 と y=-3x+9 および両軸の間の領域内の点A(a,b) に対して, a+b の最大値を求めます。

2直線の方程式は x+2y-8=0 , 3x+y-9=0 として,その係数を用いて drawline() で表示します。

領域には斜線を引きます。

作図ツールで点Aをとっておき,次のスクリプトをDrawスロットに書きます。

なお,draw axis() , axisscale(),drawline(),intersectline(),pointindomain() および,それに関係する関数が必要です。

drawaxis([-6,6],[-4,10],0.3);

axisscale([-6,6],[-4,9],[1,1]);

L1=[1,2,-8]; // 直線1 ax+by+c=0 の係数 [a,b,c]

L2=[3,1,-9]; // 直線2の係数 L1,L2 の順序は問わず

// Aを通る傾きmの直線の方程式

m=1;

f(x):=(-m*(x-A.x)+A.y);

// 直線と交点を描く

linecolor([0,0,0]);

drawline(L1,[-6,6]);

drawline(L2,[-6,6]);

linecolor([0,0,1]);

if(A.xy!=[2,3],

drawtext([2,3],"(2,3)",size->20); // 交点の座標

);

//領域にハッチをかける

repeat(60,n,start->-20, // 適当に変える

k=n/2;

p1=intersectline(L1,[1,-1,k]);

p2=intersectline(L2,[1,-1,k]);

r2=min([p1_1,p2_1]);

p3=intersectline([0,1,0],[1,-1,k]); //x軸との交点

r1=max([p3_1,0]);

drawline([1,-1,k],[r1,r2]);

);

plist=[[0,0],[3,0],[2,3],[0,4]]; // 4点の座標

drawtext(A+[0.2,0],"A("+A.x+","+A.y+")",size->20);

if(pointindomain(A.xy,plist)>0,

plot(f(#),color->[1,0,0]);

drawtext([-1,A.x+A.y],A.x+A.y,size->20);

);

点Aが領域内にあればAを通る直線とy切片を表示します。

このページの下からダウンロードできます。