Passa ai contenuti principali

OpenOpt

La mia predilezione per il python come linguaggio ospite per framework di ottimizzazione non è un mistero per chi mi segue e per chi lavora con me.
Dopo aver parlato più volte di pulp, ora vorrei portare in risalto OpenOpt.
Si tratta di un framework di sviluppato all'Accademia Nazionale delle Scienze Ucraina dal dipartimento di ottimizzazione. Le potenzialità mi sembrano interessanti, anche se non l'ho mai provato in concreto.

Il livello di astrazione a cui si pone è molto basso, rispetto a pulp. Ad esempio, un problema di programmazione lineare si scrive come:

"""

Example:

Let's concider the problem

15x1 + 8x2 + 80x3 -> min (1)

subjected to

x1 + 2x2 + 3x3 <= 15 (2)

8x1 + 15x2 + 80x3 <= 80 (3)

8x1 + 80x2 + 15x3 <=150 (4)

100x1 + 10x2 + x3 >= 800 (5)

80x1 + 8x2 + 15x3 = 750 (6)

x1 + 10x2 + 100x3 = 80 (7)

x1 >= 4 (8)

-8 >= x2 >= -80 (9)

"""

from numpy import *

from scikits.openopt import LP

f = array([15,8,80])

A = mat('1 2 3; 8 15 80; 8 80 15; -100 -10 -1') # numpy.ndarray is also allowed

b = [15, 80, 150, -800] # numpy.ndarray, matrix etc are also allowed

Aeq = mat('80 8 15; 1 10 100') # numpy.ndarray is also allowed

beq = (750, 80)


lb = [4, -80, -inf]

ub = [inf, -8, inf]

p = LP(f, A=A, Aeq=Aeq, b=b, beq=beq, lb=lb, ub=ub)

#or p = LP(f=f, A=A, Aeq=Aeq, b=b, beq=beq, lb=lb, ub=ub)

r = p.solve('cvxopt_lp') # CVXOPT must be installed

"""

Other:

r = p.solve('glpk') # CVXOPT & glpk must be installed

r = p.solve('lpSolve')#lp_solve must be installed

or using converter lp2nlp:

r = p.solve('nlp:ralg', xtol=1e-8, ftol=1e-7) # for ralg reducing xtol, ftol is usually required

r = p.solve('nlp:algencan')

r = p.solve('nlp:ipopt')

r = p.solve('nlp:scipy_slsqp')

"""

print 'objFunValue:', r.ff # should print 204.48841578

print 'x_opt:', r.xf # should print [ 9.89355041 -8. 1.5010645 ]

però questo può essere interessante in alcuni contesti, quali la prototipazione di solver ad-hoc.
All'indirizzo http://openopt.blogspot.com/ si trova un blog dove vengono pubblicati gli annunci relativi ad OpenOpt.
Sono graditi i commenti di eventuali utilizzatori.

Commenti

Post popolari in questo blog

Digital Twin – Il caso Hyperloop

  Con il termine  hyperloop  si identificano una serie di tecnologie che promettono di rivoluzionare il trasporto di persone e cose. L’idea di base è molto semplice: far viaggiare all’interno di tubi, dove viene creato il vuoto, delle capsule ad alta velocità con binari a levitazione magnetica.   Credits: Virgin Hyperloop on instagram.com/p/CRHEB9ctQ6u/   Qualche tempo fa, mi è capitato di leggere un interessante articolo su come la progettazione della soluzione guidata dal gruppo Virgin, sia stata affiancata da analisi svolte mediante un sistema di ottimizzazione matematica. Come meglio descritto nel seguito, un digital twin, completamente basato su un modello matematico di ottimizzazione, permette di valutare le migliori scelte progettuali tenendo in considerazione i vari obiettivi di progetto.   La necessità di avere un digital twin nasce probabilmente dal fatto che le tecnologie  hyperloop  non hanno una base di partenza già esistente. No...

La programmazione dichiarativa come sistema di intelligenza artificiale

Sull'intelligenza artificiale si è creato un grosso equivoco, che vale la pena risolvere. https://www.instagram.com/p/BwyfskdnV7a/ Senza voler essere formali, l’accezione comune di intelligenza artificiale è usata per identificare un sistema informatico basato su reti neurali usato per risolvere problemi di  difficile formalizzazione . Ad esempio, le auto a guida autonoma, i sistemi di traduzione in tempo reale, la previsione dei prezzi dell’energia. Per  difficile formalizzazione  intendo un concetto molto sottile. Scrivere un algoritmo che sia in grado di riconoscere l’immagine di un gattino è molto difficile se non impossibile. Mentre, in maniera paradossale, è più semplice scrivere un algoritmo che  impari  a riconoscere gattini perché è stato addestrato con le immagini di mille diversi gattini. Cablare ed addestrare una rete neurale che riconosca gattini è un esempio di  meta-programmazione , proprio perché non si scrive un algoritmo che ca...

Offerta di lavoro - Supply Chain Manger – Lidl

Non sono proprio sicuro che possa essere pertinente con la ricerca operativa, ma nel dubbio vi rigiro la seguente offerta di lavoro: In questa posizione dinamica e stimolante lavorerai all’interno di una delle nostre Direzioni Regionali e dovrai garantire l'ottimizzazione del flusso delle merci all’interno del magazzino, l’approvvigionamento e il monitoraggio dei prodotti in vendita e dei livelli di stock. Le candidature sono accettate al seguente link: http://lavoro.lidl.it/cps/rde/SID-59F0BF78-A59B5EA5/career_lidl_it/hs.xsl/jobsearch.htm?hitsperchunk=10&chunk=0&chnksim=0&action=showJobDetails&id=1372 # Buona fortuna... :-)