Skip to content

Commit 61cf7f4

Browse files
committed
update
1 parent de0acab commit 61cf7f4

File tree

12 files changed

+593
-0
lines changed

12 files changed

+593
-0
lines changed
Binary file not shown.
Binary file not shown.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
while read line; do x=`echo $line | cut -f 2 -d" "`; y=`echo $line | cut -f 3 -d " "`; echo "\\draw[red, fill=red] ($x, $y) circle (3pt);"; done < aaa
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
f(x, y ) = 2*x + 1.5*y
2+
f1(x, y) = -( 12*x + 24*y -120)
3+
f2(x, y) = -( 16*x + 16*y - 120 )
4+
f3(x, y) = -( 30*x + 12*y - 120 )
5+
f4(x, y) = x - 15
6+
f5(x, y) = y-15
7+
f6(x,y) = - x
8+
f7( x, y) = -y
9+
t=100
10+
set contour
11+
set cntrparam levels 20
12+
set isosample 50
13+
splot [0:15] [y=0:15] f(x,y) - t*( log( -f1(x,y) ) + log( -f2(x,y) ) + log( -f3(x,y) ) + log( -f4(x,y) ) + log( -f5(x,y) ) + log( -f6(x,y) ) + log( -f7(x,y) ) )
14+
pause mouse
15+
pause mouse
16+
pause mouse
17+
pause mouse
18+
pause mouse
19+
pause mouse
20+
pause mouse
21+
pause mouse
22+
pause mouse
23+
pause mouse
24+
pause mouse
25+
pause mouse
26+
pause mouse
27+
pause mouse
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
import numpy as np;
2+
3+
m=5;
4+
n=7;
5+
6+
c = np.array( [2, 1.5, 0, 0, 0, 0, 0] );
7+
A = np.array( [ [12, 24, -1, 0, 0, 0, 0],
8+
[16, 16, 0, -1, 0, 0, 0],
9+
[30, 12, 0, 0, -1, 0, 0],
10+
[1, 0, 0, 0, 0, 1, 0],
11+
[0, 1, 0, 0, 0, 0, 1] ] );
12+
b = np.array( [ 120, 120, 120, 15, 15] );
13+
14+
x = np.array( [12, 1, 72, 120, 312, 1, 14] );
15+
y = np.array( [0.01, 0.01, 0.01, -1, -1 ] );
16+
s = np.zeros( n );
17+
e = np.array( [ 1 ] * n );
18+
19+
alpha = 0.95;
20+
epsilon = 0.001;
21+
beta = 0.8;
22+
23+
num = 0;
24+
theta = 0;
25+
26+
print(" iter x1 x2 theta max(xi*si) min(xi*si) mu #");
27+
while ( True ):
28+
found = True;
29+
print("============== iter: %d ============" % (num) );
30+
s = c - np.dot( np.transpose(A), y );
31+
32+
maxxs = max( x * s );
33+
minxs = min( x * s );
34+
35+
mu = beta * np.dot( x, s) / n;
36+
37+
print(" %d %lf %lf %lf %lf %lf %lf #" % (num, x[0], x[1], theta, maxxs, minxs, mu) );
38+
num = num + 1;
39+
for i in range(n) :
40+
print("x[%d]: %lf s[%d]: %lf x*s[%d]: %lf " % (i, x[i], i, s[i], i, x[i]*s[i] ) );
41+
if ( x[i] * s[i] > epsilon ):
42+
found = False;
43+
44+
if (found == True ):
45+
break;
46+
47+
X = np.zeros( shape=(n,n) );
48+
for i in range(n) :
49+
X[i, i] = x[i];
50+
51+
Xinv = np.zeros( shape=(n,n) );
52+
for i in range(n) :
53+
Xinv[i, i] = 1.0/x[i];
54+
55+
X2 = np.zeros( shape=(n,n) );
56+
for i in range(n) :
57+
X2[i, i] = x[i]*x[i];
58+
59+
AX2c = np.dot( A, np.dot( X2, c) );
60+
AX2Atr = np.dot( A, np.dot( X2, np.transpose(A)) );
61+
AX2Atry = np.dot( AX2Atr, y );
62+
muAXe = mu * np.dot( A, np.dot(X, e) );
63+
64+
dy = np.linalg.solve( AX2Atr, -AX2c + AX2Atry + muAXe );
65+
66+
X2c = np.dot( X2, c);
67+
X2Atry = np.dot( X2, np.dot( np.transpose(A), y) );
68+
muXe = mu * np.dot( X, e);
69+
X2Atr = np.dot( X2, np.transpose(A) );
70+
71+
dx = 1/mu * ( X2c - X2Atry - muXe + np.dot(X2Atr, dy) );
72+
73+
for i in range(n):
74+
print("dx[%d]: %lf" % (i, dx[i] ) );
75+
for i in range(m):
76+
print("dy[%d]: %lf" % (i, dy[i] ) );
77+
78+
thetax = -1;
79+
for i in range(n) :
80+
if (dx[i] < 0 ):
81+
t = x[i] / (-dx[i]);
82+
print("t[%d]: %lf for dx" % (i, t) );
83+
if ( t < thetax or thetax < 0 ):
84+
thetax = t;
85+
86+
Atrdy = np.dot( np.transpose(A), dy);
87+
88+
s = s - mu * np.dot( Xinv, e );
89+
thetay = 9999999;
90+
for i in range(n):
91+
if(Atrdy[i] > 0 ):
92+
t = s[i] / (Atrdy[i]);
93+
print("t[%d]: %lf for dy" % (i, t) );
94+
if(t < thetay ):
95+
thetay = t;
96+
97+
thetax = min( 1, thetax*alpha );
98+
thetay = min( 1, thetay*alpha );
99+
100+
print("thetax: %lf thetay: %lf theta: %lf" % (thetax, thetay, theta) );
101+
x = x + thetax * dx;
102+
y = y + thetay * dy;
103+
104+
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
import numpy as np;
2+
3+
m=5;
4+
n=7;
5+
6+
c = np.array( [2, 1.5, 0, 0, 0, 0, 0] );
7+
A = np.array( [ [12, 24, -1, 0, 0, 0, 0],
8+
[16, 16, 0, -1, 0, 0, 0],
9+
[30, 12, 0, 0, -1, 0, 0],
10+
[1, 0, 0, 0, 0, 1, 0],
11+
[0, 1, 0, 0, 0, 0, 1] ] );
12+
b = np.array( [ 120, 120, 120, 15, 15] );
13+
14+
x = np.array( [10, 10, 240, 200, 300, 5, 5] );
15+
y = np.array( [1, 1, 1, -60, -60 ] );
16+
s = np.zeros( n );
17+
18+
s[0] = 2 - 12 * y[0] - 16*y[1] - 30*y[2] -y[3];
19+
s[1] = 1.5 - 24*y[0] - 16*y[1] - 12*y[2] -y[4];
20+
s[2] = y[0];
21+
s[3] = y[1];
22+
s[4] = y[2];
23+
s[5] = -y[3];
24+
s[6] = -y[4];
25+
26+
alpha = 0.995;
27+
epsilon = 0.001;
28+
beta = 0.2;
29+
30+
num = 0;
31+
theta = 0;
32+
33+
print(" iter x1 x2 theta max(xi*si) min(xi*si) mu #");
34+
while ( True ):
35+
found = True;
36+
print("============== iter: %d ============" % (num) );
37+
maxxs = max( x * s );
38+
minxs = min( x * s );
39+
40+
mu = beta * np.dot( x, s) / n;
41+
42+
print(" %d %lf %lf %lf %lf %lf %lf #" % (num, x[0], x[1], theta, maxxs, minxs, mu) );
43+
num = num + 1;
44+
for i in range(n) :
45+
print("x[%d]: %lf s[%d]: %lf x*s[%d]: %lf " % (i, x[i], i, s[i], i, x[i]*s[i] ) );
46+
if ( x[i] * s[i] > epsilon ):
47+
found = False;
48+
49+
50+
if (found == True ):
51+
break;
52+
53+
XSinv = np.zeros( shape=(n,n) );
54+
for i in range(n) :
55+
XSinv[i, i] = x[i] / s[i];
56+
57+
XinvS = np.zeros( shape=(n,n) );
58+
for i in range(n) :
59+
XinvS[i, i] = s[i] / x[i];
60+
61+
muSinvE = np.zeros( n );
62+
muXinvE = np.zeros( n );
63+
64+
for i in range(n):
65+
muXinvE[i] = mu / x[i];
66+
for i in range(n):
67+
muSinvE[i] = mu / s[i];
68+
69+
AXSinvAt = np.dot( np.dot( A, XSinv ), np.transpose(A) );
70+
71+
dy = np.linalg.solve( AXSinvAt, b - np.dot(A, muSinvE) );
72+
dx = -x + muSinvE + np.dot( np.dot( XSinv, np.transpose(A) ), dy );
73+
ds = -s - np.dot( XinvS, dx ) + muXinvE;
74+
75+
for i in range(n):
76+
print("dx[%d]: %lf" % (i, dx[i] ) );
77+
for i in range(m):
78+
print("dy[%d]: %lf" % (i, dy[i] ) );
79+
for i in range(n):
80+
print("ds[%d]: %lf" % (i, ds[i] ) );
81+
82+
thetax = -1;
83+
for i in range(n) :
84+
if (dx[i] < 0 ):
85+
t = x[i] / (-dx[i]);
86+
print("t[%d]: %lf" % (i, t) );
87+
if ( t < thetax or thetax < 0 ):
88+
thetax = t;
89+
90+
thetas = -1;
91+
for i in range(n) :
92+
if (ds[i] < 0 ):
93+
t = s[i] / (-ds[i]);
94+
if ( t < thetas or thetas < 0 ):
95+
thetas = t;
96+
97+
theta = min( 1, thetax*alpha, thetas*alpha);
98+
99+
print("thetax: %lf thetas: %lf theta: %lf" % (thetax, thetas, theta) );
100+
x = x + theta * dx;
101+
s = s + theta * ds;
102+
y = y + theta * dy;
103+
104+
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
import numpy as np;
2+
3+
m=5;
4+
n=7;
5+
6+
c = np.array( [2, 1.5, 0, 0, 0, 0, 0] );
7+
A = np.array( [ [12, 24, -1, 0, 0, 0, 0],
8+
[16, 16, 0, -1, 0, 0, 0],
9+
[30, 12, 0, 0, -1, 0, 0],
10+
[1, 0, 0, 0, 0, 1, 0],
11+
[0, 1, 0, 0, 0, 0, 1] ] );
12+
b = np.array( [ 120, 120, 120, 15, 15] );
13+
14+
x = np.array( [14, 1, 72, 120, 312, 1, 14] );
15+
y = np.array( [0.01, 0.01, 0.01, -1, -1 ] );
16+
s = np.zeros( n );
17+
18+
s[0] = 2 - 12 * y[0] - 16*y[1] - 30*y[2] -y[3];
19+
s[1] = 1.5 - 24*y[0] - 16*y[1] - 12*y[2] -y[4];
20+
s[2] = y[0];
21+
s[3] = y[1];
22+
s[4] = y[2];
23+
s[5] = -y[3];
24+
s[6] = -y[4];
25+
26+
alpha = 0.995;
27+
epsilon = 0.001;
28+
beta = 0.7;
29+
30+
num = 0;
31+
theta = 0;
32+
33+
print(" iter x1 x2 theta max(xi*si) min(xi*si) mu #");
34+
while ( True ):
35+
found = True;
36+
print("============== iter: %d ============" % (num) );
37+
maxxs = max( x * s );
38+
minxs = min( x * s );
39+
40+
mu = beta * np.dot( x, s) / n;
41+
42+
print(" %d %lf %lf %lf %lf %lf %lf #" % (num, x[0], x[1], theta, maxxs, minxs, mu) );
43+
num = num + 1;
44+
for i in range(n) :
45+
print("x[%d]: %lf s[%d]: %lf x*s[%d]: %lf " % (i, x[i], i, s[i], i, x[i]*s[i] ) );
46+
if ( x[i] * s[i] > epsilon ):
47+
found = False;
48+
49+
50+
if (found == True ):
51+
break;
52+
53+
XSinv = np.zeros( shape=(n,n) );
54+
for i in range(n) :
55+
XSinv[i, i] = x[i] / s[i];
56+
57+
XinvS = np.zeros( shape=(n,n) );
58+
for i in range(n) :
59+
XinvS[i, i] = s[i] / x[i];
60+
61+
muSinvE = np.zeros( n );
62+
muXinvE = np.zeros( n );
63+
64+
for i in range(n):
65+
muXinvE[i] = mu / x[i];
66+
for i in range(n):
67+
muSinvE[i] = mu / s[i];
68+
69+
AXSinvAt = np.dot( np.dot( A, XSinv ), np.transpose(A) );
70+
71+
dy = np.linalg.solve( AXSinvAt, b - np.dot(A, muSinvE) );
72+
dx = -x + muSinvE + np.dot( np.dot( XSinv, np.transpose(A) ), dy );
73+
ds = -s - np.dot( XinvS, dx ) + muXinvE;
74+
75+
for i in range(n):
76+
print("dx[%d]: %lf" % (i, dx[i] ) );
77+
for i in range(m):
78+
print("dy[%d]: %lf" % (i, dy[i] ) );
79+
for i in range(n):
80+
print("ds[%d]: %lf" % (i, ds[i] ) );
81+
82+
thetax = -1;
83+
for i in range(n) :
84+
if (dx[i] < 0 ):
85+
t = x[i] / (-dx[i]);
86+
print("t[%d]: %lf" % (i, t) );
87+
if ( t < thetax or thetax < 0 ):
88+
thetax = t;
89+
90+
thetas = -1;
91+
for i in range(n) :
92+
if (ds[i] < 0 ):
93+
t = s[i] / (-ds[i]);
94+
if ( t < thetas or thetas < 0 ):
95+
thetas = t;
96+
97+
theta = min( 1, thetax*alpha, thetas*alpha);
98+
99+
print("thetax: %lf thetas: %lf theta: %lf" % (thetax, thetas, theta) );
100+
x = x + theta * dx;
101+
s = s + theta * ds;
102+
y = y + theta * dy;
103+
104+

0 commit comments

Comments
 (0)