introduzione a python e gurobi - unisi.itdetti/introductiontopythonita.pdf · 2018-05-15 ·...
TRANSCRIPT
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