Introduzione a Python e Gurobi
Introduzione Python è un linguaggio di programmazione ad alto livello, rilasciato pubblicamente per la prima volta nel 1991 dal suo creatore Guido van Rossum, programmatore olandese attualmente operativo in Dropbox. Ultime Versioni: Python 2.7 Python 3.6
Python Jupyter Notebook -> Scrivere e eseguire codice, scrivere testo, commentare il codice... Aprire il Terminal /opt/anaconda/bin/jupyter notebook Python Notebook
Jupyter Notebook New-> Notebooks - Python
Sintassi di Base Funzione di Stampa Gli elementi separati da virgole sono stampati con uno spazio nel mezzo. Operatori come \n o \t indicano una nuova riga o uno spazio di tabulazione.
Sintassi di Base I commenti sono contrassegnati dal simbolo # Generalmente, i programmatori chiamano le variabili con dei nomi significativi, in modo da documentare a cosa servono. Possono contenere sia lettere che numeri, ma non possono iniziare con un numero. In Python esistono alcune parole chiave riservate, che non si possono utilizare come nomi di variabili.
Tipi di Variabili Cinque tipi di variabili diverse: numeri, stringhe, liste, tuple e dizionari. Istruzioni di assegnazione
Tipi di Variabili Stringhe: Una stringa è una sequenza di caratteri.
Tipi di Variabili Liste: Come una stringa, una lista è una sequenza di valori. Gli elementi sono separi da virgole e racchiusi tra parentesi quadre [ ]
Tipi di Variabili Funzione: sum([cosa sommare] [iterazione]) Se vogliamo sommare la lista p= [4 6 7]
Tipi di Variabili Per creare una lista vuota di 5 elementi. Per creare una matrice vuota di 5 colonne e 3 righe. Per accedere ad ogni elemento L[i][j].
Tipi di Variabili Python contiene una serie di funzioni per convertire i valori da un tipo a un altro. A stringa str() A intero int() A numeri I virgola mobile float()
Operatori di Base Operatori Aritmetici + Somma / Divisione - Sostrazione % Modulo * Moltiplicazione ** Potenza Operatori di confronto a==b a è uguale a b a<b a è minore di b a!=b a è diverso da b a>=b a è maggiore o uguale a b a>b a è maggiore di b a<=b a è minore o uguale a b
Operatori di Base Operatori di assegnazione a=b Assegna il valore di b ad a a*=b Moltiplica a con b, assegna il risultato ad a a+=b a-=b Aggiunge b ad a, assegna il risultato ad a Sottrae b ad a,, assegna il risultato ad a Operatori Logici and or not a/=b Divide a con b, assegna il risultato ad a a**=b a^b e, assegna il risultato ad a
IF / ELSE Esecuzione Condizionale Esempio:
Iterazione Tipo while for Descrizione Ripete un gruppo di istruzioni se la condizione è vera. Esegue un gruppo di istruzioni un numero specificato di volte. while:
Iterazione Tipo while for Descrizione Ripete un gruppo di istruzioni se la condizione è vera. Esegue un gruppo di istruzioni un numero specificato di volte. for:
For: Iterazione
Iterazione Controllo. Istruzione break Descrizione Termina il loop.
Input da Tastiera I programmi che abbiamo scritto finora non accettano dati in ingresso da parte dell utente, ed eseguono sempre le stesse operazioni. Testo = input()
Numeri casuali Import random ll modulo random contiene delle funzioni che generano numeri pseudocasuali. La funzione randint richiede due parametri interi, uno inferiore e uno superiore, e restituisce un intero casuale nell intervallo tra i due parametri (entrambi compresi) Random.randint(5,10)
Esercizio Creare un codice che genera un numero casuale tra 1 e 10. Chiede all utente di indovinare questo numero. L utente ha tre opportunità per indovinare il numero.
Gurobi È un solver commerciale. Si chiama cosí per i creatori: Zonghao Gu, Edward Rothberg and Robert Bixby. La installazione si fa mediante la pagina www.gurobi.com e si può chiedere una licenza accademica gratuita.
Esempio LP
Esempio LP Chiamiamo il modulo gurobi Definiamo il modelo con Model. Dentro la parentesi si aggiunge il nome del modello. E la variabile m sarà usata da Python ogni volta che ci riferiamo al modello.
Esempio LP Si creano le varibili con model.addvar() model.addvar(), prende i seguenti argomenti vtype può essere GRB.BINARY, GRB.CONTINUOUS, GRB.INTEGER, GRB.SEMICONT o GRB.SEMIINT
Esempio LP Per integrare le variabili dobbiamo aggiornare il modelo, model.update() Definiamo la funzione obbiettivo con model.setobjective( EXPRESION, SENSE ) GRB.MAXIMIZE e GRB.MINIMIZE
Esempio LP Aggiungiamo i vincoli con model.addconstr( LHS, sense, RHS, name= ) o con model.addconstr( expression, name ) GRB.EQUAL, GRB.LESS_EQUAL or GRB.GREATER_EQUAL
Esempio LP Scriviamo la formulazione in un file.lp con model.write() Alla fine risolviamo il problema con model.optimize()
Esempio LP Una volta risolto il problema possiamo accedere: Al valore della funzione obbiettivo m.objval m.objval Ai valori delle variabili m.getvars()
Esercizio