Ярлыки

Показаны сообщения с ярлыком LP. Показать все сообщения
Показаны сообщения с ярлыком LP. Показать все сообщения

понедельник, 22 июля 2013 г.

How we can get sets from elements of different groups?


This task may be present as LP problem.
So, let n(i) - count of elements in group im(j) - volume of cell number j. Our goal is to fill all calls with condition: there are elements from different groups in each cell.
Let X(i,j) - count of element that from group  i and put into cell j.
Our main goal is maximize sum(X(i,j)) for all j with follow constraints:
1)    upper bound for elements count from each group:
sumj(X(i,j))<=n(i) for all i;
2)    upper bound for volume of each cell:
sumi(X(i,j))<=m(j) for all j;
3) there are elements from the same group no more than t in each cell :
X(i,j)<=t for all i и j.

четверг, 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):
      ...