The MOSEK Python optimizer API manual Version 7.0 (Revision 141)

Optimizer API for Python - Documentation - Mosek Optimizer API for Python - Documentation - Mosek

25.11.2015 Views

94 CHAPTER 7. ADVANCED API TUTORIAL 31 # Since the value infinity is never used, we define 32 # ’infinity’ symbolic purposes only 33 infinity = 0 34 35 skx = [mosek.stakey.bas] * numvar 36 skc = [mosek.stakey.fix] * numvar 37 38 task.appendvars(numvar) 39 task.appendcons(numvar) 40 41 42 for i in range(len(asub)): 43 task.putacol(i,asub[i],aval[i]) 44 45 for i in range(numvar): 46 task.putconbound(i,mosek.boundkey.fx,0.0,0.0) 47 48 for i in range(numvar): 49 task.putvarbound(i, 50 mosek.boundkey.fr, 51 -infinity, 52 infinity) 53 54 # Define a basic solution by specifying 55 # status keys for variables & constraints. 56 57 for i in range(numvar): 58 task.putsolutioni (mosek.accmode.var, 59 i, 60 mosek.soltype.bas, 61 skx[i], 62 0.0, 63 0.0, 64 0.0, 65 0.0) 66 67 for i in range(numvar): 68 task.putsolutioni (mosek.accmode.con, 69 i, 70 mosek.soltype.bas, 71 skc[i], 72 0.0, 73 0.0, 74 0.0, 75 0.0) 76 77 task.initbasissolve(basis) 78 79 80 81 def main(): 82 numcon = 2 83 numvar = 2 84 85 aval = [ [ -1.0 ], 86 [ 1.0, 1.0 ] ] 87 asub = [ [ 1 ], 88 [ 0, 1 ] ]

7.2. SOLVING LINEAR SYSTEMS INVOLVING THE BASIS MATRIX 95 89 90 ptrb = [ 0,1 ] 91 ptre = [ 1,3 ] 92 93 #int[] bsub = new int[numvar]; 94 #double[] b = new double[numvar]; 95 #int[] basis = new int[numvar]; 96 97 98 with mosek.Env() as env: 99 with mosek.Task(env) as task: 100 # Directs the log task stream to the user specified 101 # method task msg obj.streamCB 102 task.set Stream(mosek.streamtype.log, 103 lambda msg : sys.stdout.write(msg)) 104 # Put A matrix and factor A. 105 # Call this function only once for a given task. 106 107 basis = [0] * numvar 108 b = [ 0.0, -2.0 ] 109 bsub = [ 0, 1 ] 110 111 put a(task, 112 aval, 113 asub, 114 ptrb, 115 ptre, 116 numvar, 117 basis) 118 119 # now solve rhs 120 b = [ 1, -2] 121 bsub = [ 0, 1 ] 122 nz = task.solvewithbasis(0,2,bsub,b) 123 print("\nSolution to Bx = b:\n") 124 125 # Print solution and show correspondents 126 # to original variables in the problem 127 for i in range(nz): 128 if basis[bsub[i]] < numcon: 129 print("This should never happen") 130 else: 131 print("x%d = %d" % (basis[bsub[i]] - numcon, b[bsub[i]])) 132 133 b[0] = 7 134 bsub[0] = 0 135 136 nz = task.solvewithbasis(0,1,bsub,b); 137 138 print("\nSolution to Bx = b:\n") 139 # Print solution and show correspondents 140 # to original variables in the problem 141 for i in range(nz): 142 if basis[bsub[i]] < numcon: 143 print ("This should never happen") 144 else: 145 print ("x%d = %d" % (basis[bsub[i]] - numcon, b[bsub[i]] )) 146

94 CHAPTER 7. ADVANCED <strong>API</strong> TUTORIAL<br />

31 # Since the value infinity is never used, we define<br />

32 # ’infinity’ symbolic purposes only<br />

33 infinity = 0<br />

34<br />

35 skx = [mosek.stakey.bas] * numvar<br />

36 skc = [mosek.stakey.fix] * numvar<br />

37<br />

38 task.appendvars(numvar)<br />

39 task.appendcons(numvar)<br />

40<br />

41<br />

42 for i in range(len(asub)):<br />

43 task.putacol(i,asub[i],aval[i])<br />

44<br />

45 for i in range(numvar):<br />

46 task.putconbound(i,mosek.boundkey.fx,0.0,0.0)<br />

47<br />

48 for i in range(numvar):<br />

49 task.putvarbound(i,<br />

50 mosek.boundkey.fr,<br />

51 -infinity,<br />

52 infinity)<br />

53<br />

54 # Define a basic solution by specifying<br />

55 # status keys for variables & constraints.<br />

56<br />

57 for i in range(numvar):<br />

58 task.putsolutioni (mosek.accmode.var,<br />

59 i,<br />

60 mosek.soltype.bas,<br />

61 skx[i],<br />

62 0.0,<br />

63 0.0,<br />

64 0.0,<br />

65 0.0)<br />

66<br />

67 for i in range(numvar):<br />

68 task.putsolutioni (mosek.accmode.con,<br />

69 i,<br />

70 mosek.soltype.bas,<br />

71 skc[i],<br />

72 0.0,<br />

73 0.0,<br />

74 0.0,<br />

75 0.0)<br />

76<br />

77 task.initbasissolve(basis)<br />

78<br />

79<br />

80<br />

81 def main():<br />

82 numcon = 2<br />

83 numvar = 2<br />

84<br />

85 aval = [ [ -1.0 ],<br />

86 [ 1.0, 1.0 ] ]<br />

87 asub = [ [ 1 ],<br />

88 [ 0, 1 ] ]

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!