Introduzione a Python e Gurobi - unisi.itdetti/IntroductiontoPythonITA.pdf · 2018-05-15 ·...

Post on 22-Jan-2020

1 views 0 download

Transcript of Introduzione a Python e Gurobi - unisi.itdetti/IntroductiontoPythonITA.pdf · 2018-05-15 ·...

IntroduzioneaPythoneGurobi

•  Pythonèunlinguaggiodiprogrammazioneadaltolivello,rilasciatopubblicamenteperlaprimavoltanel1991dalsuocreatoreGuidovanRossum,programmatoreolandeseattualmenteoperativoinDropbox.

•  UltimeVersioni:– Python2.7– Python3.6

Introduzione

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

•  AprireilTerminal•  /opt/anaconda/bin/jupyternotebook

•  PythonNotebook

JupyterNotebook•  New->Notebooks-Python

SintassidiBase•  FunzionediStampa– Glielementiseparatidavirgolesonostampaticonunospazionelmezzo.

– Operatoricome\no\tindicanounanuovarigaounospazioditabulazione.

SintassidiBase•  Icommentisonocontrassegnatidalsimbolo#

•  Generalmente,iprogrammatorichiamanolevariabilicondeinomisignificativi,inmododadocumentareacosaservono.

•  Possonoconteneresialetterechenumeri,manonpossonoiniziareconunnumero.

•  InPythonesistonoalcuneparolechiaveriservate,chenonsipossonoutilizarecomenomidivariabili.

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

•  Istruzionidiassegnazione

TipidiVariabili•  Stringhe:Unastringaèunasequenzadicaratteri.

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

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

TipidiVariabili•  Percreareunalistavuotadi5elementi.

•  Percreareunamatricevuotadi5colonnee3righe.PeraccedereadognielementoL[i][j].

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

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

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

IF/ELSE•  EsecuzioneCondizionale

Esempio:

Iterazione

while:

Tipo Descrizione

while Ripeteungruppodiistruzioniselacondizioneèvera.

for Esegueungruppodiistruzioniunnumerospecificatodivolte.

Iterazione

for:

Tipo Descrizione

while Ripeteungruppodiistruzioniselacondizioneèvera.

for Esegueungruppodiistruzioniunnumerospecificatodivolte.

IterazioneFor:

Iterazione•  Controllo.

Istruzione Descrizione

break Terminailloop.

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

•  Testo=input()

Numericasuali•  Importrandom•  llmodulorandomcontienedellefunzionichegeneranonumeripseudocasuali.

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

Esercizio

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

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

•  Lainstallazionesifamediantelapaginawww.gurobi.comesipuòchiedereunalicenzaaccademicagratuita.

EsempioLP

EsempioLP•  Chiamiamoilmodulogurobi

•  DefiniamoilmodeloconModel.Dentrolaparentesisiaggiungeilnomedelmodello.ElavariabilemsaràusatadaPythonognivoltacheciriferiamoalmodello.

EsempioLP•  Sicreanolevaribiliconmodel.addVar()

•  model.addVar(),prendeiseguentiargomenti

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

EsempioLP•  Perintegrarelevariabilidobbiamoaggiornareilmodelo,model.update()

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

•  GRB.MAXIMIZEeGRB.MINIMIZE

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

•  GRB.EQUAL,GRB.LESS_EQUALorGRB.GREATER_EQUAL

EsempioLP•  Scriviamolaformulazioneinunfile.lpconmodel.write()

•  Allafinerisolviamoilproblemaconmodel.optimize()

EsempioLP•  Unavoltarisoltoilproblemapossiamoaccedere:– Alvaloredellafunzioneobbiettivom.objval

m.objval– Aivaloridellevariabilim.getVars()

Esercizio