Ярлыки

четверг, 21 марта 2013 г.

use mosek for solve LP in Python


#import module
import mosek
#import numpy arrays or mosek arraystry:    from numpy import array,zeros,ones
except ImportError:
    from mosek.array import array, zeros, ones
# stream for collect data from MOSEKdef streamprinter(text):    sys.stdout.flush()     #main functiondef main (bkc,blc,buc,bkx,blx,bux,csub,cval,asub,acof,ptrb,ptre,niv,ntc):  # create mosek environment  env = mosek.Env ()  # add stream to environment  env.set_Stream (mosek.streamtype.log, streamprinter)    # create task  task = env.Task(0,0)  # add output-data stream to task  task.set_Stream (mosek.streamtype.log, streamprinter)
#there are examples of creation right part of constraints and variable constraints#  bkc = [ mosek.boundkey.up, mosek.boundkey.lo  ]#  blc = [              -inf,              -4.0  ]
#  buc = [             250.0,               inf  ]
#  bkx = [ mosek.boundkey.lo, mosek.boundkey.lo  ]
#  blx = [               0.0,               0.0  ]
#  bux = [               inf,               inf  ]
#coefficients of goal function#  c   = [               1.0,               0.64 ]
#coeff numbers in constraints
#  asub = [  array([0,   1]),    array([0,    1])   ]
#...and this values
#  aval = [ array([50.0, 3.0]), array([31.0, -2.0]) ]
#number of variables  numvar = len(bkx)
#number of constraints  numcon = len(bkc)
  # create constraints
  task.append(mosek.accmode.con,numcon)
  # create variables
  task.append(mosek.accmode.var,numvar)
  # The goal function adding (csub - numbers of variables, cval - coefficients of variables)
  task.putcfix(0.0)  task.putclist(csub,cval)
  # add constraints  task.putboundslice(mosek.accmode.con,                     0, numcon,
                     bkc, blc, buc)
  # add variable constraints  task.putboundslice(mosek.accmode.var,                     0, numvar,
                     bkx, blx, bux)
  # Input non-zero elements of matrix A (by column)  for j in range(numcon):
      aptrb,aptre = ptrb[j],ptre[j]
      task.putavec(mosek.accmode.con,j,
                   asub[aptrb:aptre],
                   acof[aptrb:aptre])
  # input optimize criterion (minimize/maximize)  task.putobjsense(mosek.objsense.minimize)    # integer variables  numlist=list()
  typelist=list()
  for i in range(niv,numvar):
      numlist.append(i)
      typelist.append(mosek.variabletype.type_int)
  task.putvartypelist(numlist,typelist)
   
  # constants of begin solve   task.putintparam(mosek.iparam.mio_construct_sol,                   mosek.onoffkey.on);
  # all variable are unknown in begin of solve   task.makesolutionstatusunknown(mosek.soltype.itg);
 #we can save task in some file #task.writedata("test.lp")   # solve task  task.optimize()
  # output solution
  if task.solutiondef(mosek.soltype.itg):
      ...

Комментариев нет:

Отправить комментарий