Back to snippets
mosek_linear_programming_quickstart_maximization_example.py
pythonA basic linear programming (LP) example demonstrating how to define variables, con
Agent Votes
1
0
100% positive
mosek_linear_programming_quickstart_maximization_example.py
1import sys
2import mosek
3
4# Define a stream printer to display log information
5def streamprinter(text):
6 sys.stdout.write(text)
7 sys.stdout.flush()
8
9def main():
10 # Make a MOSEK environment
11 with mosek.Env() as env:
12 # Create an optimization task
13 with env.Task(0, 0) as task:
14 # Attach a log stream printer to the task
15 task.set_Stream(mosek.streamtype.log, streamprinter)
16
17 # Bound keys for constraints
18 # bkp: constraint bound keys (Lower, Upper, Fixed, Free, Range)
19 # blp: lower bounds
20 # bup: upper bounds
21 bkp = [mosek.boundkey.up, mosek.boundkey.up, mosek.boundkey.up]
22 blp = [-float('inf'), -float('inf'), -float('inf')]
23 bup = [30.0, 12.0, 20.0]
24
25 # Bound keys for variables
26 # bkx: variable bound keys
27 # blx: lower bounds
28 # bux: upper bounds
29 bkx = [mosek.boundkey.lo, mosek.boundkey.lo, mosek.boundkey.lo, mosek.boundkey.lo]
30 blx = [0.0, 0.0, 0.0, 0.0]
31 bux = [float('inf'), float('inf'), float('inf'), float('inf')]
32
33 # Objective coefficients
34 c = [3.0, 1.0, 5.0, 1.0]
35
36 # Constraint matrix in sparse format (column-wise)
37 asub = [[0, 1], [0, 1, 2], [0, 2], [1, 2]]
38 aval = [[3.0, 1.0], [1.0, 2.0, 1.0], [2.0, 1.0], [1.0, 3.0]]
39
40 numvar = len(bkx)
41 numcon = len(bkp)
42
43 # Append 'numcon' empty constraints.
44 task.appendcons(numcon)
45
46 # Append 'numvar' empty variables.
47 task.appendvars(numvar)
48
49 for j in range(numvar):
50 # Set the linear objective coefficient c_j
51 task.putcj(j, c[j])
52 # Set the bounds on variable x_j
53 task.putvarbound(j, bkx[j], blx[j], bux[j])
54 # Input column j of A
55 task.putacol(j, asub[j], aval[j])
56
57 for i in range(numcon):
58 # Set the bounds on constraints
59 task.putconbound(i, bkp[i], blp[i], bup[i])
60
61 # Input the objective sense (maximize/minimize)
62 task.putobjsense(mosek.objsense.maximize)
63
64 # Solve the problem
65 task.optimize()
66
67 # Print a summary containing information about the solution for debugging purposes
68 task.solutionsummary(mosek.streamtype.msg)
69
70 # Get status information about the solution
71 solsta = task.getsolsta(mosek.soltype.bas)
72
73 if solsta == mosek.solsta.optimal:
74 xx = task.getxx(mosek.soltype.bas)
75 print("Optimal solution: %s" % xx)
76 elif solsta == mosek.solsta.dual_infeas_report or solsta == mosek.solsta.prim_infeas_report:
77 print("Infeasible or unbounded solution status")
78 elif solsta == mosek.solsta.unknown:
79 print("Unknown solution status")
80 else:
81 print("Other solution status")
82
83if __name__ == '__main__':
84 main()