Ярлыки

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

среда, 20 марта 2013 г.

Python: your time to each program (Windows)

Script that write how many time each program used in Windows (by title of show window).


import sys

#module for work with windows (32bit)
import win32gui

txt=''
time1=time.time()
#times dictionary
appdict=dict()
while True:
#pause (it's influence to accuracy)
    time.sleep(5)
#title of the current window
    newtxt = win32gui.GetWindowText(win32gui.GetForegroundWindow())
#if window was changed than update time of beginning work with other window
    if txt!=newtxt:
        time2=time.time()
#add previous time to dict
        if appdict.get(txt)!=None:
            appdict[txt]=appdict[txt]+round(time2,0)-round(time1,0)
        else:
            appdict[txt]=round(time2,0)-round(time1,0)
        txt=newtxt
        time1=time.time()
    f=open('timerep.csv', 'w')
    csvwr = csv.writer(f, delimiter=';',lineterminator='\n')
#We write only window that summary time over 5 minutes (Other window is non-influential).
    for i in appdict.items():
        if i[1]>=300:
            csvwr.writerow(i)
    f.close()

вторник, 19 марта 2013 г.

static in Apache (simple)


static in Apache:


We must write next string in file apache2.conf:
Alias /media/ "/home/username/mysite/media/"
first arg - link to get images, second arg - full path to storage images folder.

Than we can write in code (link to the image):
<img src="/media/my_image1.jpg" />

понедельник, 18 марта 2013 г.

using GLPK in Python (Linear programming)


# import PuLP's functions

from pulp import *

# create new task of Linear programming (LP) with maximize of the goal functions
prob = LpProblem("Knapsack problem", LpMaximize)

# variable (integer)
x1 = LpVariable("x1", 0, 10, 'Integer')
x2 = LpVariable("x2", 0, 10, 'Integer')
x3 = LpVariable("x3", 0, 10, 'Integer')

goal function ("the cost of all in backpack")
prob += 17*x1 + 30*x2 + 75*x3, "obj"

# constraints ("weight of the backpack")
prob += 1.5*x1 + 2.5*x2 + 6*x3 <= 20, "c1"

# run solver
prob.solve()

# print task status
print "Status:", LpStatus[prob.status]

# print optimized variable result
for v in prob.variables():
    print v.name, "=", v.varValue

# print value of goal function
print ("objective = %s$" % value(prob.objective))

Alternate:
we can create LP-file (CPLEX) and use it with GLPK:

    cmd=['glpsol.exe','--cpxlp',outputname,'-o',solfile]
    p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, stdin=subprocess.PIPE)
    for line in p.stdout:
        print(">>>>> " + str(line.decode()).rstrip())

PyQt: show SVG

#scale increase 
self.connect(self.incScaleButton, QtCore.SIGNAL("clicked()"),lambda who="incScale": self.incScale())
 #scale decrease 
 self.connect(self.decScaleButton, QtCore.SIGNAL("clicked()"),lambda who="decScale": self.decScale())
 #create Scene for show diagrams
 self.sc=QtGui.QGraphicsScene(self.graphicsView)

 def incScale(self):
     self.scale+=0.1
     self.printGDP(scale=self.scale)

 def decScale(self):
     self.scale-=0.1
     self.printGDP(scale=self.scale)

 #show diagram: 
 filename=fileArrayt[fileNumber]
 #create object for SVG modification 
 r=QtSvg.QSvgRenderer()
 #load data 
 r.load(QtCore.QByteArray(arrayToSave))
 #change rectangle for our image 
 r.setViewBox(QtCore.QRectF(0.0, 0.0, 3200.0, 2000))
 #create additional element
 item=QtSvg.QGraphicsSvgItem()
 #put our image into it 
 item.setSharedRenderer(r)
 #change scale
 item.setScale(1.0)
 #clear Scene, change size of it 
 self.sc.clear()
 self.sc.setSceneRect(QtCore.QRectF(0.0, 0.0, 3200.0, 2000))
 #change position of item into Scene 
 item.setPos(QtCore.QPointF(10,50))
 #add item to Scene 
 self.sc.addItem(item)
 #for QGraphicsView set Scene, define "view point" 
 self.graphicsView.setScene(self.sc)
 self.graphicsView.centerOn(0,0)

create JAR in Eclipse

1. Project import Import files as existing project (File → Import... → Existing Projects into Workspace). 2. Creating JAR Context menu on project folder > Export... > Java/JAR file. Than we change path and name of JAR in field "Select the export destination". 3. Some error Error: "JAR creation failed. See details for additional information". Details: Resource is out of sync with the file system: /projectName/.svn/entries Solution: Context menu on project folder > Refresh

add cirillic language to TEX (Ubuntu)

install follow packages in Ubuntu and use "utf8x": texlive-lang-cyrillic texlive-latex-extra \usepackage[utf8x]{inputenc}