introduzione a python e gurobi - unisi.itdetti/introductiontopythonita.pdf · 2018-05-15 ·...

31
Introduzione a Python e Gurobi

Upload: others

Post on 22-Jan-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introduzione a Python e Gurobi - unisi.itdetti/IntroductiontoPythonITA.pdf · 2018-05-15 · GRB.CONTINUOUS, GRB.INTEGER, GRB.SEMICONT o GRB.SEMIINT Esempio LP • Per integrare le

IntroduzioneaPythoneGurobi

Page 2: Introduzione a Python e Gurobi - unisi.itdetti/IntroductiontoPythonITA.pdf · 2018-05-15 · GRB.CONTINUOUS, GRB.INTEGER, GRB.SEMICONT o GRB.SEMIINT Esempio LP • Per integrare le

•  Pythonèunlinguaggiodiprogrammazioneadaltolivello,rilasciatopubblicamenteperlaprimavoltanel1991dalsuocreatoreGuidovanRossum,programmatoreolandeseattualmenteoperativoinDropbox.

•  UltimeVersioni:– Python2.7– Python3.6

Introduzione

Page 3: Introduzione a Python e Gurobi - unisi.itdetti/IntroductiontoPythonITA.pdf · 2018-05-15 · GRB.CONTINUOUS, GRB.INTEGER, GRB.SEMICONT o GRB.SEMIINT Esempio LP • Per integrare le

Python•  JupyterNotebook->Scrivereeeseguirecodice,scriveretesto,commentareilcodice...

•  AprireilTerminal•  /opt/anaconda/bin/jupyternotebook

•  PythonNotebook

Page 4: Introduzione a Python e Gurobi - unisi.itdetti/IntroductiontoPythonITA.pdf · 2018-05-15 · GRB.CONTINUOUS, GRB.INTEGER, GRB.SEMICONT o GRB.SEMIINT Esempio LP • Per integrare le

JupyterNotebook•  New->Notebooks-Python

Page 5: Introduzione a Python e Gurobi - unisi.itdetti/IntroductiontoPythonITA.pdf · 2018-05-15 · GRB.CONTINUOUS, GRB.INTEGER, GRB.SEMICONT o GRB.SEMIINT Esempio LP • Per integrare le

SintassidiBase•  FunzionediStampa– Glielementiseparatidavirgolesonostampaticonunospazionelmezzo.

– Operatoricome\no\tindicanounanuovarigaounospazioditabulazione.

Page 6: Introduzione a Python e Gurobi - unisi.itdetti/IntroductiontoPythonITA.pdf · 2018-05-15 · GRB.CONTINUOUS, GRB.INTEGER, GRB.SEMICONT o GRB.SEMIINT Esempio LP • Per integrare le

SintassidiBase•  Icommentisonocontrassegnatidalsimbolo#

•  Generalmente,iprogrammatorichiamanolevariabilicondeinomisignificativi,inmododadocumentareacosaservono.

•  Possonoconteneresialetterechenumeri,manonpossonoiniziareconunnumero.

•  InPythonesistonoalcuneparolechiaveriservate,chenonsipossonoutilizarecomenomidivariabili.

Page 7: Introduzione a Python e Gurobi - unisi.itdetti/IntroductiontoPythonITA.pdf · 2018-05-15 · GRB.CONTINUOUS, GRB.INTEGER, GRB.SEMICONT o GRB.SEMIINT Esempio LP • Per integrare le

TipidiVariabili•  Cinquetipidivariabilidiverse:numeri,stringhe,liste,tupleedizionari.

•  Istruzionidiassegnazione

Page 8: Introduzione a Python e Gurobi - unisi.itdetti/IntroductiontoPythonITA.pdf · 2018-05-15 · GRB.CONTINUOUS, GRB.INTEGER, GRB.SEMICONT o GRB.SEMIINT Esempio LP • Per integrare le

TipidiVariabili•  Stringhe:Unastringaèunasequenzadicaratteri.

Page 9: Introduzione a Python e Gurobi - unisi.itdetti/IntroductiontoPythonITA.pdf · 2018-05-15 · GRB.CONTINUOUS, GRB.INTEGER, GRB.SEMICONT o GRB.SEMIINT Esempio LP • Per integrare le

TipidiVariabili•  Liste:Comeunastringa,unalistaèunasequenzadivalori.Glielementisonoseparidavirgoleeracchiusitraparentesiquadre[]

Page 10: Introduzione a Python e Gurobi - unisi.itdetti/IntroductiontoPythonITA.pdf · 2018-05-15 · GRB.CONTINUOUS, GRB.INTEGER, GRB.SEMICONT o GRB.SEMIINT Esempio LP • Per integrare le

TipidiVariabili•  Funzione:sum([Cosasommare][iterazione])– Sevogliamosommarelalistap=[467]

Page 11: Introduzione a Python e Gurobi - unisi.itdetti/IntroductiontoPythonITA.pdf · 2018-05-15 · GRB.CONTINUOUS, GRB.INTEGER, GRB.SEMICONT o GRB.SEMIINT Esempio LP • Per integrare le

TipidiVariabili•  Percreareunalistavuotadi5elementi.

•  Percreareunamatricevuotadi5colonnee3righe.PeraccedereadognielementoL[i][j].

Page 12: Introduzione a Python e Gurobi - unisi.itdetti/IntroductiontoPythonITA.pdf · 2018-05-15 · GRB.CONTINUOUS, GRB.INTEGER, GRB.SEMICONT o GRB.SEMIINT Esempio LP • Per integrare le

TipidiVariabili•  Pythoncontieneunaseriedifunzioniperconvertireivaloridauntipoaunaltro.– Astringastr()– Ainteroint()– AnumeriIvirgolamobilefloat()

Page 13: Introduzione a Python e Gurobi - unisi.itdetti/IntroductiontoPythonITA.pdf · 2018-05-15 · GRB.CONTINUOUS, GRB.INTEGER, GRB.SEMICONT o GRB.SEMIINT Esempio LP • Per integrare le

OperatoridiBase•  OperatoriAritmetici

•  Operatoridiconfronto

+ Somma / Divisione

- Sostrazione % Modulo

* Moltiplicazione ** Potenza

a==b aèugualeab a<b aèminoredib

a!=b aèdiversodab a>=b aèmaggioreougualeab

a>b aèmaggioredib a<=b aèminoreougualeab

Page 14: Introduzione a Python e Gurobi - unisi.itdetti/IntroductiontoPythonITA.pdf · 2018-05-15 · GRB.CONTINUOUS, GRB.INTEGER, GRB.SEMICONT o GRB.SEMIINT Esempio LP • Per integrare le

OperatoridiBase•  Operatoridiassegnazione

•  OperatoriLogici

a=b Assegnailvaloredibada a*=b Moltiplicaaconb,assegnailrisultatoada

a+=b Aggiungebada,assegnailrisultatoada

a/=b Divideaconb,assegnailrisultatoada

a-=b Sottraebada,,assegnailrisultatoada

a**=b a^be,assegnailrisultatoada

and

or

not

Page 15: Introduzione a Python e Gurobi - unisi.itdetti/IntroductiontoPythonITA.pdf · 2018-05-15 · GRB.CONTINUOUS, GRB.INTEGER, GRB.SEMICONT o GRB.SEMIINT Esempio LP • Per integrare le

IF/ELSE•  EsecuzioneCondizionale

Esempio:

Page 16: Introduzione a Python e Gurobi - unisi.itdetti/IntroductiontoPythonITA.pdf · 2018-05-15 · GRB.CONTINUOUS, GRB.INTEGER, GRB.SEMICONT o GRB.SEMIINT Esempio LP • Per integrare le

Iterazione

while:

Tipo Descrizione

while Ripeteungruppodiistruzioniselacondizioneèvera.

for Esegueungruppodiistruzioniunnumerospecificatodivolte.

Page 17: Introduzione a Python e Gurobi - unisi.itdetti/IntroductiontoPythonITA.pdf · 2018-05-15 · GRB.CONTINUOUS, GRB.INTEGER, GRB.SEMICONT o GRB.SEMIINT Esempio LP • Per integrare le

Iterazione

for:

Tipo Descrizione

while Ripeteungruppodiistruzioniselacondizioneèvera.

for Esegueungruppodiistruzioniunnumerospecificatodivolte.

Page 18: Introduzione a Python e Gurobi - unisi.itdetti/IntroductiontoPythonITA.pdf · 2018-05-15 · GRB.CONTINUOUS, GRB.INTEGER, GRB.SEMICONT o GRB.SEMIINT Esempio LP • Per integrare le

IterazioneFor:

Page 19: Introduzione a Python e Gurobi - unisi.itdetti/IntroductiontoPythonITA.pdf · 2018-05-15 · GRB.CONTINUOUS, GRB.INTEGER, GRB.SEMICONT o GRB.SEMIINT Esempio LP • Per integrare le

Iterazione•  Controllo.

Istruzione Descrizione

break Terminailloop.

Page 20: Introduzione a Python e Gurobi - unisi.itdetti/IntroductiontoPythonITA.pdf · 2018-05-15 · GRB.CONTINUOUS, GRB.INTEGER, GRB.SEMICONT o GRB.SEMIINT Esempio LP • Per integrare le

InputdaTastiera•  I programmi che abbiamo scritto finora nonaccettano dati in ingresso da partedell’utente, ed eseguono sempre le stesseoperazioni.

•  Testo=input()

Page 21: Introduzione a Python e Gurobi - unisi.itdetti/IntroductiontoPythonITA.pdf · 2018-05-15 · GRB.CONTINUOUS, GRB.INTEGER, GRB.SEMICONT o GRB.SEMIINT Esempio LP • Per integrare le

Numericasuali•  Importrandom•  llmodulorandomcontienedellefunzionichegeneranonumeripseudocasuali.

•  Lafunzionerandintrichiededueparametriinteri,unoinferioreeunosuperiore,erestituisceuninterocasualenell’intervallotraidueparametri(entrambicompresi)– Random.randint(5,10)

Page 22: Introduzione a Python e Gurobi - unisi.itdetti/IntroductiontoPythonITA.pdf · 2018-05-15 · GRB.CONTINUOUS, GRB.INTEGER, GRB.SEMICONT o GRB.SEMIINT Esempio LP • Per integrare le

Esercizio

•  Creareuncodicechegeneraunnumerocasualetra1e10.Chiedeall’utentediindovinarequestonumero.L’utentehatreopportunitàperindovinareilnumero.

Page 23: Introduzione a Python e Gurobi - unisi.itdetti/IntroductiontoPythonITA.pdf · 2018-05-15 · GRB.CONTINUOUS, GRB.INTEGER, GRB.SEMICONT o GRB.SEMIINT Esempio LP • Per integrare le

Gurobi•  Èunsolvercommerciale.•  Sichiamacosípericreatori:ZonghaoGu,EdwardRothbergandRobertBixby.

•  Lainstallazionesifamediantelapaginawww.gurobi.comesipuòchiedereunalicenzaaccademicagratuita.

Page 24: Introduzione a Python e Gurobi - unisi.itdetti/IntroductiontoPythonITA.pdf · 2018-05-15 · GRB.CONTINUOUS, GRB.INTEGER, GRB.SEMICONT o GRB.SEMIINT Esempio LP • Per integrare le

EsempioLP

Page 25: Introduzione a Python e Gurobi - unisi.itdetti/IntroductiontoPythonITA.pdf · 2018-05-15 · GRB.CONTINUOUS, GRB.INTEGER, GRB.SEMICONT o GRB.SEMIINT Esempio LP • Per integrare le

EsempioLP•  Chiamiamoilmodulogurobi

•  DefiniamoilmodeloconModel.Dentrolaparentesisiaggiungeilnomedelmodello.ElavariabilemsaràusatadaPythonognivoltacheciriferiamoalmodello.

Page 26: Introduzione a Python e Gurobi - unisi.itdetti/IntroductiontoPythonITA.pdf · 2018-05-15 · GRB.CONTINUOUS, GRB.INTEGER, GRB.SEMICONT o GRB.SEMIINT Esempio LP • Per integrare le

EsempioLP•  Sicreanolevaribiliconmodel.addVar()

•  model.addVar(),prendeiseguentiargomenti

•  vtypepuòessereGRB.BINARY,GRB.CONTINUOUS,GRB.INTEGER,GRB.SEMICONToGRB.SEMIINT

Page 27: Introduzione a Python e Gurobi - unisi.itdetti/IntroductiontoPythonITA.pdf · 2018-05-15 · GRB.CONTINUOUS, GRB.INTEGER, GRB.SEMICONT o GRB.SEMIINT Esempio LP • Per integrare le

EsempioLP•  Perintegrarelevariabilidobbiamoaggiornareilmodelo,model.update()

•  Definiamolafunzioneobbiettivoconmodel.setObjective(‘EXPRESION’,‘SENSE’)

•  GRB.MAXIMIZEeGRB.MINIMIZE

Page 28: Introduzione a Python e Gurobi - unisi.itdetti/IntroductiontoPythonITA.pdf · 2018-05-15 · GRB.CONTINUOUS, GRB.INTEGER, GRB.SEMICONT o GRB.SEMIINT Esempio LP • Per integrare le

EsempioLP•  Aggiungiamoivincoliconmodel.addConstr(‘LHS’,sense,‘RHS’,name=‘’)oconmodel.addConstr(‘expression’,“name”)

•  GRB.EQUAL,GRB.LESS_EQUALorGRB.GREATER_EQUAL

Page 29: Introduzione a Python e Gurobi - unisi.itdetti/IntroductiontoPythonITA.pdf · 2018-05-15 · GRB.CONTINUOUS, GRB.INTEGER, GRB.SEMICONT o GRB.SEMIINT Esempio LP • Per integrare le

EsempioLP•  Scriviamolaformulazioneinunfile.lpconmodel.write()

•  Allafinerisolviamoilproblemaconmodel.optimize()

Page 30: Introduzione a Python e Gurobi - unisi.itdetti/IntroductiontoPythonITA.pdf · 2018-05-15 · GRB.CONTINUOUS, GRB.INTEGER, GRB.SEMICONT o GRB.SEMIINT Esempio LP • Per integrare le

EsempioLP•  Unavoltarisoltoilproblemapossiamoaccedere:– Alvaloredellafunzioneobbiettivom.objval

m.objval– Aivaloridellevariabilim.getVars()

Page 31: Introduzione a Python e Gurobi - unisi.itdetti/IntroductiontoPythonITA.pdf · 2018-05-15 · GRB.CONTINUOUS, GRB.INTEGER, GRB.SEMICONT o GRB.SEMIINT Esempio LP • Per integrare le

Esercizio