Questa pagina elenca le modifiche apportate a OR-Tools, tra cui nuove funzionalità, correzioni di bug e miglioramenti al codice e alle procedure di installazione.
Se riscontri problemi durante l'installazione di OR-Tools, consulta la sezione Risoluzione dei problemi nelle istruzioni di installazione di OR-Tools. Se il tuo problema non è presente nell'elenco, controlla i problemi su GitHub oppure non esitare ad aprirne uno nuovo e saremo lieti di fornirti assistenza.
Di seguito sono riportate le note di rilascio di OR-Tools, a partire dalla release più recente.
Maggio 2024
Annuncio del rilascio della versione 9.10 di OR-Strumenti
Abbiamo rilasciato OR-Strumenti v9.10. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Puoi trovare la nota di rilascio su github
March 2024
Annuncio del rilascio della versione 9.9 di OR-Strumenti
Abbiamo rilasciato OR-Strumenti v9.9. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Puoi trovare la nota di rilascio su github
Novembre 2023
Lancio della versione 9.8 di OR-Tools
Abbiamo rilasciato OR-Strumenti v9.8. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Modifiche alla piattaforma
- Aggiungi Python 3.12.
- Aggiungi il supporto per Ubuntu 23.10
Linear Solver
- Porta
ModelBuilder
a .Net. - Rinomina
LogCallback
inMbLogCallback
per evitare conflitti con SAT LogCallback. - API Extend ModelBuilder:
- Aggiungi vincoli di indicatori.
- Aggiungi il supporto del suggerimento.
- Aggiungi la clonazione dei modelli.
Opzione matematica
- Una rielaborazione profonda.
Routing
- Aggiungi lo stato
ROUTING_OPTIMAL
. - Imposta
RoutingModel
come non copiabile né spostabile. - Correggi il loop infinito negli operatori di ricerca locale.
- Aggiungi uno struct interno
PickupDeliveryPosition
. - Aggiungi i metodi
IsPickup()
eIsDelivery()
.
SAT
- Riduci l'ingombro di memoria per i modelli di grandi dimensioni.
- Ricerca della pianificazione migliorata.
- add packing_precedences_lns.
- ottimizzare e correggere il salto di fattibilità.
- ottimizzare il logging di presolvenza lineare e migliorare il logging di presolvenza.
- Migliora la presolvenza per
int_abs
,int_mod
,int_prod
elin_max
. - Migliora il supporto Panda
- Poche correzioni di bug.
Agosto 2023
Annuncio del rilascio della versione 9.7 di OR-Strumenti
Abbiamo rilasciato OR-Strumenti v9.7. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Modifiche alla piattaforma
- Rilascia Centos-8 (EOL).
- Rilascia Debian 10.
- Rilascia Fedora
[33, 36]
(EOL). - Rilascia Ubuntu 18.04 LTS (EOL).
- Elimina Python 3.7 (EOL).
- Disattiva il supporto di
netcore3.1
in CMake (EOL).
Python generatore di modelli
- Consenti l'utilizzo di serie e frame di dati Pandas per creare variabili.
- Vedi il compito
- Vedi bin_packing
- Completa le informazioni di digitazione
PDLP
- vari aggiornamenti.
CP-SAT
- Miglioramenti delle prestazioni. (fasibility_jump, lin_max)
- Migliora la gestione dei tagli
- Nuovo worker di goal_shaving_search dedicato a migliorare il limite inferiore dell'obiettivo (durante la riduzione al minimo)
- Digitazione di annotazioni per cp_model.py python
- Supporto parziale sperimentale per i panda in cp_model.py
- Vedi il compito
- Vedi bin_packing
- Worker sperimentali basati sulla violazione della ricerca locale:
- attivato con i parametri: num_violation_ls:xxx
- ottimizzato per il modello lineare (
linear
,bool_or
,bool_and
,at_most_one
,exactly_one
) - funziona correttamente con lin_max, prodotto, divisione
- supporta no_overlap, cumulative, circuito, route
- disattivata con no_overlap_2d
- numero consigliato di worker ls:
num_workers
->num_violation_ls
:(8, 1), (16, 2) (24, 3), (32, 4)
Marzo 2023
Annuncio del rilascio della versione 9.6 di OR-Strumenti
Abbiamo rilasciato OR-Strumenti v9.6. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Modifiche alla piattaforma
- Aggiungi il supporto Fedora 37 e 38.
- Elimina Python 3.6 (non supportato da
protobuf
). - Rilascia Python 3.7 su macOS (non supportato da
scipy
). - Aggiungi il supporto
net7.0
in CMake (utilizza-DUSE_DOTNET_7=ON
) - Elimina
netcore3.1
nei pacchetti nuget .org
Dipendenze
- SCIP
v801
->v803
(nota: ora SCIP usa una licenza compatibile con OSI) - calata in corda doppia
20220623.1
->20230105.0
- Protobuf
v21.5
->v21.12
- SWIG
4.1.1
- JNA Java
5.11.0
->5.12.1
Bazel
- Aggiungi il supporto di pybind11.
- Aggiungi il supporto per wrapper Java.
Risolutori
- PDLP: dd wrapper Python.
- CP-SAT: Miglioramenti delle prestazioni.
- GLOP: Modifica la presolvenza.
- ModelBuilder: Python: Better Numpy support.
- Routing: miglioramenti delle prestazioni (ricerca locale)
Problemi noti:
- CP-SAT: se il subsolver
pseudo_costs
viene ignorato, viene restituito un parametro non valido (vedi #3706).
Novembre 2022
Lancio di OR-Strumenti v9.5
Abbiamo rilasciato OR-Strumenti v9.5. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Modifiche alla piattaforma
- Aggiungere il supporto SID Debian.
- Aggiungi il supporto Fedora 35 e 36.
- Aggiungi il supporto per Ubuntu 22.10.
- Rilascia Python 3.6 su macOS.
- Aggiungi il supporto per Python 3.11.
Aggiornamento delle dipendenze
- Protobuf
v19.4
->v21.5
. - Risolutore SCIP
v800
->v801
.
CP-SAT
- Miglioramenti alla soluzione: max(array), vincoli booleani, vincoli lineari.
- La ricerca con interleaving dovrebbe essere deterministica in parallelo.
- Tagli lineari: pulisci tagli quadrati e int_prod; riscrivi la pipeline di taglio.
- Modello e soluzione di input dell'impronta (visibili nel log).
- Pianificazione dei miglioramenti.
- La solita serie di correzioni di bug (arresti anomali durante la fase di presolvenza, arresti anomali nei tagli, soluzioni irrealizzabili, modello impossibile in LNS).
GLOP
- Velocizza la riscrittura dell'algebra lineare e della regola di selezione pivot.
Linear Solver
- Aggiungi
knapsack_interface.cc
. - Sposta l'API model_builder nella directory linear_solver (intestazioni ed esempi).
- Aggiungi il supporto per Gurobi 10.
Routing
- Libera pochi parser per vari tipi di problemi di routing.
Agosto 2022
Lancio della versione 9.4 di OR-Strumenti
Abbiamo rilasciato OR-Strumenti v9.4. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Piattaforme
- Aggiungi il supporto Debian-10 (vedi #3029).
- Aggiungi il supporto di Ubuntu 22.04 LTS (vedi #3276). Nota: non avrà il supporto .Net 3.1 (vedi dotnet/core#7038).
- Rimozione del supporto di Ubuntu 21.10.
Varie
- Suddividi l'archivio per lingue e aggiungi la configurazione CMake a quella C++ (#3200).
Grafico
Suddividi ortools.graph.pywrapgraph
in:
ortools.graph.python.linear_sum_assignment
.ortools.graph.python.max_flow
.ortools.graph.python.min_cost_flow
.
Ciò consente di utilizzare numpy per velocizzare la configurazione dei problemi.
CP-SAT
Alcuni miglioramenti su:
- pianificazione (propagazione, tagli, limiti inferiori).
- MaxSAT (presolve, euristica basata su core).
- Prestazioni MIP (presolvenza, interruzioni).
Marzo 2022
Lancio di OR-Tools v9.3
Abbiamo rilasciato OR-Strumenti v9.3. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Modifiche alla piattaforma
- Interrompi l'assistenza Debian-10.
- Elimina l'assistenza per Ubuntu-16.04.
- Elimina .NET Framework 4.5.2.
Aggiornamento delle dipendenze
- Aggiungi l'oggetto
3.4.0
. - Aggiungi Google R2
2021-11-01
. - Protobuf
3.19.1
->3.19.4
. - SCIP
7.0.1
->v800
.
Python
- Aggiungi pybind11.
Caratteristiche
- Aggiungi PDLP come sperimentale.
- Aggiungi MathOpt come sperimentale.
CP-SAT
- Alcune API sono state rinominate per coerenza, ad esempio
LinearExpr.ScalProd.
->LinearExpr.WeightedSum.
. - Aggiungi
AddAtLeastOne
/AddAtMostOne
/AddExactlyOne
metodi. - Aggiungi
AddMultiplicationConstraint(z, x, y)
in tutte le lingue. - Aggiungi
AddMultipleCircuit()
in tutte le lingue.
C++
- Testo esplicito:
IntVar(BoolVar)
. LinearExpr::Add*
rimosso e sostituito dall'operatore, ad esempioLinearExpr +=
.- Aggiungere operatori aritmetici all'espressione lineare.
LinearExpr::BooleanSum/BooleanScalProd
rimosso, utilizzaSum/WeightedSum
.- Aggiungi
CpModelBuilder::FixVariable()
che sovrascrivono il dominio della variabile in un singolo valore.
Java
- Riscrivi
LinearExpr
, aggiungi una classe del builder incrementale:LinearExpr.newBuilder().add(x).addSum(<array of variables>).build()
. - Segui l'API C++:
Circuit
,MultipleCircuit
,Cumulative
,Reservoir
,AllowedAssignment
eForbiddenAssignment
ora restituiscono una classe specializzata con un'API incrementale per aggiungere nuove variabili, termini, richieste...
C
- Documenta tutti i metodi.
- Segui l'API C++:
Circuit
,MultipleCircuit
,Cumulative
,Reservoir
,AllowedAssignment
eForbiddenAssignment
ora restituiscono una classe specializzata con un'API incrementale per aggiungere nuove variabili, termini, richieste... - Aggiungi la classe
LinearExprBuilder
per creare espressioni in modo incrementale.
Sistema di compilazione
CMake
- Richiedi almeno CMake >= 3,18.
Marca
- Ora utilizzare internamente la build basata su CMake.
Dicembre 2021
Annuncio del rilascio della versione 9.2 di OR-Strumenti
Abbiamo rilasciato OR-Strumenti v9.2. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Modifiche alla piattaforma
- Aggiunta del supporto per Ubuntu 21:10 (ultima release in sequenza).
Aggiornamento delle dipendenze
- Aggiornamento di .Net TFM net5.0 -> net6.0 (è necessario .Net SDK 6.0 LTS e .Net SDK 3.1 LTS).
- dbeil-cpp 20210324.2 -> 20211102.0.
- Protobuf 3.18.0 -> 3.19.1.
- Googletest 1.10.0 -> 1.11.0.
- Python: add numpy >= 1.13.3.
- Su MacOS compila Coin-OR in
-O1
per evitare arresti anomali nei runner.
Routing
- Miglioramento dei filtri.
- Migliorare l'euristica della prima soluzione.
- Migliora i posizionamenti delle interruzioni temporali.
CP-SAT
Modifiche che provocano un errore
- Il buffer di protocollo sottostante non è compatibile con le versioni precedenti. Qualsiasi buffer di protocollo memorizzato dovrà essere rigenerato con le API del builder aggiornate (in C++, Python, Java e .NET)
- In particolare, il protobuf dell'intervallo è stato pulito poiché abbiamo rimosso i vecchi campi (inizio, dimensione e fine) e rinominato quelli nuovi (utilizzando
_view
) per utilizzare il nome dei campi rimossi.
Nuove funzionalità
- I vincoli
all_different
,reservoir
,modulo
,multiplication
edivision
accettano espressioni affine (a * var + b
) ovunque siano richieste variabili intere. - L'obiettivo accetta i coefficienti in virgola mobile (consulta la classe
DoubleLinearExpr
in C++/Java/.NET. Vedi l'esempioknapsack_2d_sat.py
in Python). - Il vincolo
no_overlap_2d
supporta intervalli facoltativi. - L'API C++ implementa gli operatori
+
e*
per creare espressioni.
Miglioramenti
- Codice di prerisoluzione migliorato.
- Controllo dei modelli più preciso.
- Rielabora il vincolo del serbatoio.
- Aggiungi tagli energici per il vincolo no_overlap_2d.
- Miglioramento dell'allentamento lineare dei vincoli di codifica
(
literal implies var == value
).
Metodi deprecati e rimossi
- C++
BooleanSum
eBooleanScalProd
deprecati. Basta usareSum
eScalProd
. - C++
AddLinMinEquality
eAddLinMaxEquality
rimossi. Basta usareAddMinEquality
eAddMaxEquality
.
Incompatibilità future
- In futuro, riscriveremo il livello di definizione dei modelli Java in modo che sia più vicino al livello C++.
- Nel livello di definizione del modello C++, renderemo esplicito il ruolo IntVar(BoolVar var).
- Stiamo contemplando di rendere l'API Python conforme allo standard PEP 8 (utilizzando i nomi snake_case). In questo caso, forniremo un file sed per la portabilità del codice.
Sistema di compilazione
Bazel
- Correggi la build di Windows.
CMake
- Aggiungi l'opzione
FETCH_PYTHON_DEPS
(valore predefinito:ON
). - Aggiungi il supporto facoltativo per il risolutore GPLK (valore predefinito:
-DUSE_GLPK=OFF
).
Python
- Supporta i numeri interi
numpy
nella maggior parte dell'API CP-SAT. - Correggi l'errore
__version__
mancante.
Settembre 2021
Annuncio del rilascio della versione 9.1 di OR-Strumenti
Abbiamo rilasciato OR-Strumenti v9.1. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Modifiche alla piattaforma
- Python: usa l'immagine
manylinux2014
(vedi PEP 599). - Python: aggiungi il supporto per aarch64 Linux usando l'immagine
manylinux2014_aarch64
. - .Net: aggiungi il supporto di .Net 5.0.
Aggiornamento delle dipendenze
- dbeil-cpp 20210324.1 -> 20210324.2.
- Protobuf 3.15.8 -> 3.18.0.
- SCIP 7.0.1 -> master.
- Googletest 1.8.0 -> 1.10.0.
- python: uso di
warning
incp_model.py
(vedi #2530). - python: BSL-py 0.11 -> 0.13.
CMake
- Versione minima di Bump richiesta 3.14-3.15 (vedi #2528).
- Python: picco minimo richiesto versione 3.14 -> 3.18 (vedi #2774).
Marca
La build basata sulla creazione è deprecata. Esegui la migrazione a CMake o Bazel per creare la build dall'origine.
Java
- Migliora la robustezza del caricatore di librerie nativo (vedi #2742).
- Correggi l'arresto anomalo di JVM Garbage Collector durante lo smaltimento del modello di routing o del risolutore di vincoli (vedi #2091) (vedi #2466).
- Correggi l'arresto anomalo del callback di logging CP-SAT quando utilizzi più worker (vedi #2775).
CP-SAT
- Migliora la solidità del codice LNS (vedi #2525).
- Migliora il codice di programmazione: nuovi metodi predefiniti per creare intervalli a dimensione fissa, nuove euristiche di ricerca, presolvenza migliorata e nuovi tagli lineari.
- Migliora il codice di routing: nuovo LNS dedicato.
- Migliora il controllo dei modelli. Ora è più pignola, in particolare a causa dei potenziali overflow.
- Miglioramento del codice MIP: migliore prerisoluzione e molteplici miglioramenti al rilassamento lineare dei modelli MIP e CP.
- Migliorare la diversità nella ricerca. Se utilizzi più di 12 worker, aggiungi worker dedicati a migliorare il limite inferiore dell'obiettivo.
- Modifica al codice di parallelismo: per impostazione predefinita, il risolutore utilizzerà tutti i core disponibili. Utilizza
num_search_parameters
per specificare il livello di parallelismo. - Depreca
SearchAllSolutions
eSolveWithSolutionCallback
. - API Python: controlli più pedanti quando si utilizza
var == ...
ovar != ...
al di fuori di una chiamatamodel.Add()
.
Aprile 2021
Lancio di OR-Strumenti v9.0
Abbiamo rilasciato OR-Strumenti v9.0. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Aggiornamenti delle dipendenze
- Abseil-cpp 20200923.3 aggiornato a 20210324.1 LTS.
- Protobuf 3.15.3 aggiornato alla 3.15.8.
- Java: jna-platform 5.5.0 aggiornato alla versione 5.8.0
Java
- OR-Tools è ora disponibile in Maven Central (consulta la pagina com.google.ortools:ortools-java).
Correzioni di bug
- Migliora il multi-threading quando utilizzi il risolutore CP-SAT (vedi #1588).
- Correggi il supporto del wrapper Python per
std::vector<std::string>
(vedi #2453). - Supporto per la rielaborazione di CPLEX (vedi #2470).
Modifica che provoca un errore nota
- Aggiungi l'accesso al logger in Python, Java e .Net (vedi #2245).
- Sostituzione di tutti i tipi Google personalizzati con quelli forniti in
cstdint
.
CP-SAT
- I metodi
SearchForAllSolutions()
,SearchAllSolutions()
eSolveWithSolutionCallback()
sono deprecati. Usa inveceSolve()
. - Migliora il supporto degli operatori standard Python. Questo può danneggiare il codice esistente errato.
Marzo 2021
Lancio di OR-Strumenti v8.2
Abbiamo rilasciato OR-Strumenti v8.2. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Aggiornamenti delle dipendenze
- Abseil-cpp 20200923.2 aggiornato a 20200923.3 LTS.
- Protobuf 3.14.0 aggiornato alla 3.15.3.
Routing
RoutingModel.RegisterTransitMatrix()
eRoutingModel.RegisterUnaryTransitVector()
aggiunti.- Modifica il ritorno di
RoutingModel.AddVectorDimension()
eRoutingModel.AddMatrixDimension()
instd::pair<int, bool>
il cuiint
è l'ID valutatore del trasporto pubblico.
Dicembre 2020
Lancio di OR-Strumenti v8.1
Abbiamo rilasciato OR-Strumenti v8.1. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Aggiornamenti delle dipendenze
- Abseil-cpp 20200923 aggiornato a 20200923.2 LTS.
- Protobuf 3.13.0 aggiornato alla 3.14.
- Aggiungi il supporto per Gurobi 9.1.0
- Elimina la dipendenza GLog (sostituita da un'implementazione personalizzata in base ai flag ABeil-cpp)
- Elimina la dipendenza GFlag (sostituita dal componente flag ABeil-cpp)
Correzioni di bug
- Correggi il doppio conteggio della licenza fluttuante Gurobi (vedi #2227).
- Correggi la build di Windows (vedi #2200).
Ottobre 2020
Lancio di OR-Strumenti v8.0
Abbiamo rilasciato OR-Strumenti v8.0. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Modifiche alla piattaforma
- Aggiunto il supporto per Python 3.9 (#2187)
- Interruzione del supporto per Python 3.5 (#2186)
<!-- In attesa del supporto di Microsoft dotnet-sdk potrebbe essere generato dopo l'uscita della release...
- Aggiunto il supporto per Ubuntu 20.10 (#2188) -->
- Interruzione del supporto per Ubuntu 16.04 LTS (#2188)
- Interruzione del supporto per Ubuntu 19.10 (#2188)
Aggiornamenti delle dipendenze
- Abseil-cpp 20200225.2 aggiornato a 20200923 LTS.
- Protobuf 3.12.2 aggiornato alla versione 3.13.0.
Modifica che provoca un errore nota
- Ora il codice sorgente Routing e CP-SAT utilizza alcune funzionalità di
C++17
. Avviso: se fornisci la tua versione diabseil-cpp
, verifica che sia creata anche perC++17
. - La firma di
MPSolver::CreateSolver
è stata modificata. L'argomento del nome del modello è stato eliminato.
CMake
- Correggi la disattivazione del supporto SCIP quando utilizzi
-DUSE_SCIP=OFF
(vedi #2129). - Integra esempi ed esempi al sistema di compilazione CMake.
Nota: può essere disattivato utilizzando
-DBUILD_SAMPLES=OFF
e-DBUILD_EXAMPLES=OFF
. Nota: può essere disattivata per una lingua specifica utilizzando-DBUILD_<LANG>_SAMPLES=OFF
o-DBUILD_<LANG>_EXAMPLES=OFF
.- Con
<LANG>
tra: CXX
,PYTHON
,JAVA
eDOTNET
.
- Con
Marca
- Richiedi
Make >= 4.3
(uso della funzione di valutazione Marc). - Richiede
CMake >= 3.14
(utilizzo dell'opzione CMake --verbose). - Aggiungi l'opzione per disabilitare il supporto SCIP utilizzando
-DUSE_SCIP=OFF
(vedi #2134). - Aggiungi l'opzione per disattivare il supporto di CLP e CBC utilizzando
-DUSE_COINOR=OFF
.
Java
- OR-Tools ora genera pacchetti di esperti (vedi #202).
Correzioni di bug
- Correggi la build C++ e Python su FreeBSD (vedi #2126).
- Correggi il debug della build in Windows (vedi #2077).
- Risolvi l'arresto anomalo di lunga data in parallelo su CP-SAT su Windows (vedi #2001, #2019).
Luglio 2020
Lancio di OR-Tools v7.8
Abbiamo rilasciato OR-Strumenti v7.8. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Aggiornamenti delle dipendenze
- Gurobi 9.0.2 è ora preintegrato in programmi binari predefiniti. Cerca la libreria condivisa gurobi 90 nel percorso di installazione predefinito dei programmi di installazione di Gurobi su MAC OS X e Windows oppure nella directory GUROBI_HOME.
- SCIP 7.0.1 è ora integrato in programmi binari predefiniti. Assicurati di rispettare la licenza SCIP prima di utilizzarla.
- Aggiunto il supporto per la versione opzionale di Xpress Solver 8.9.0.
Linear Solver
- È stato aggiunto un metodo
LinearSolver::CreateSolver()
statico per semplificare il controllo del supporto per i backend integrati con risolutori lineari. Funziona in tutte le lingue.
Correzioni di bug
- È stata corretta la build basata su CMake su FreeBSD.
- Correzione dell'ordinamento CP-SAT nella generazione di tagli cumulativi.
- Risolto il problema di perdita di memoria del risolutore lineare nel wrapper .Net.
Giugno 2020
Lancio di OR-Tools v7.7
Abbiamo rilasciato OR-Strumenti v7.7. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Aggiornamenti delle dipendenze
- Abseil-cpp b832dce aggiornato a c51510d (LTS 20200225.2).
- Protobuf 3.11.4 aggiornato alla 3.12.2.
Nuove funzionalità e miglioramenti
- Il risolutore CP-SAT ora restituisce
Optimal
anzichéFeasible
in un modello di soddisfazione (ovvero senza obiettivo). - È stata aggiunta l'euristica della pompa di fattibilità dalla community MIP.
Correzioni di bug
Risolto l'arresto anomalo multi-threading CP-SAT (vedi #2005).
Aprile 2020
Lancio di OR-Strumenti v7.6
Abbiamo rilasciato OR-Strumenti v7.6. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Nuove funzionalità di CP-SAT
Abbiamo aggiunto le seguenti nuove funzionalità al risolutore CP-SAT:
- Gestione dei piani di taglio per gli LP migliorata.
- Strumenti di debug.
Aggiornamenti delle dipendenze
Abseil-cpp 8ba96a8 aggiornato a b832dce (LTS 20200225).
Correzioni di bug
- Risolto il bug CP-SAT UNSAT nella presolvenza (vedi #1908).
- L'URL di swigwin.exe è stato corretto.
- Correzione della gestione delle mappe dei tipi di SWIG per Java e .Net.
Gennaio 2020
Lancio di OR-Tools v7.5
Abbiamo rilasciato OR-Strumenti v7.5. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Modifiche alla piattaforma
- Aggiunto il supporto per Python 3.8 (#1719)
- Eliminazione della compilazione del supporto dalle origini in Visual Studio 2017 (#1852).
- Supporto aggiornato da Centos 7 a Centos 8 (#1827).
Aggiornamento delle dipendenze
Correzioni di bug
I seguenti problemi sono stati risolti in OR-Tools v7.5 (per un elenco completo, consulta Milestone v7.5).
In particolare:
- Caricamento dell'assemblaggio corretto. Vedi #1421.
- Sono stati esposti i metodi
GetStartIndex()
eGetEndIndex()
di RouteIndexManager (#1843). - È stato corretto lo SWIG per rimuovere i metodi non funzionanti (#1838, #1276).
Ottobre 2019
Lancio di OR-Tools v7.4
Abbiamo rilasciato OR-Strumenti v7.4. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Nuove funzionalità e miglioramenti
- Il risolutore CP-SAT ora verifica la presenza di vincoli che non supportano i valori letterali di applicazione. Il controllo del modello restituirà un errore prima di risolvere se un vincolo di questo tipo ha un valore letterale di applicazione.
- Ricerca locale migliore e più veloce per la libreria di routing.
- Il risolutore lineare ora supporta il software di terze parti Xpress-MP. Per utilizzarlo, dovrai ricreare OR-Tools dall'origine.
- L'architettura del pacchetto NuGet è stata completamente riscritta. In particolare, ora supporta .NET framework >= 4.5.2 sulle piattaforme Windows.
Piattaforma deprecata
Come annunciato nelle note di rilascio di luglio 2019, OR-Tools non supporta più Python 2.7.
Aggiornamento delle dipendenze
Protobuf 3.9.0 è stato aggiornato alla versione 3.10.0.
Agosto 2019
Lancio di OR-Strumenti v7.3
Abbiamo rilasciato OR-Strumenti v7.3. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Piattaforma deprecata
Stiamo ritirando il supporto per Python 2.7 per allinearci al passaggio di Google a Python 3. Questa sarà l'ultima release di OR-Strumenti che supportano Python 2.7.
Aggiornamento delle dipendenze
Protobuf 3.8.0 è stato aggiornato alla versione 3.9.0.
Correzioni di bug
I seguenti problemi sono stati risolti in OR-Tools v7.3. Per un elenco completo, vedi Kanban 7.3.
In particolare:
- Risolto il problema di trasmissione di init/int64 su Java (#1448),
- Controllo di presolvenza corretto durante l'elaborazione di vincoli cumulativi vuoti.
Luglio 2019
Lancio di OR-Strumenti v7.2
Abbiamo rilasciato OR-Strumenti v7.2. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Modifiche alla piattaforma
- Stiamo ritirando il supporto per Python 2.7 per allinearci al passaggio di Google a Python 3. Ci sarà al massimo un'altra release di OR-Strumenti che supportano Python 2.7.
- Ubuntu 18.10 aggiornato a Ubuntu 19.04.
- Aggiunto il supporto per la compilazione da fonti in Visual Studio 2019.
- Python 3.5 non è più supportato su Windows; utilizza Python 3.6 o una versione successiva.
Aggiornamenti alle dipendenze
- Ora scegliamo come target CBC 2.10.3.
- Ora puntiamo a Protobuf 3.8.0.
CP-SAT
- Abbiamo apportato diversi miglioramenti alla ricerca, al parallelismo e al rilassamento lineare.
- Sono state aggiunte le API
LinearExpr.Sum()
eLinearExpr.ScalProd()
in Python. - API
IntVar[].Sum()
eIntVar[].ScalProd()
deprecate in C#. - C++:
SolveWithModel()
rimosso perché era un duplicato diSolveCpModel()
. - Sono stati aggiunti i metodi
CpModel.addGreaterThan()
eCpModel.addLessThan()
all'API Java.
Risolutore lineare
- È stato aggiunto
MPSolver.SetHint()
per Python, Java e C# (supportato da SCIP e Gurobi). - È stato aggiunto
MPSolver.SetNumThreads()
per Python, Java e C# (supportato da CBC, Gurobi e SCIP). - Supporto riscritto per SCIP 6.0.1.
Documentazione di riferimento
- Abbiamo aggiunto manuali di riferimento basati su doxygen e pdoc3 per tutte le lingue e per tutti gli strumenti (algoritmi, routing, grafico, linear_solver e CP-SAT). Consulta i manuali di riferimento degli strumenti OR.
- La documentazione di riferimento è completa per C++ (tutti i prodotti) e CP-SAT (C++, Python, Java).
- Stiamo esportando tutta la documentazione C++ in Python e Java.
- La documentazione .NET è carente e non abbiamo soluzioni in futuro per migliorarla. L'abbiamo conservata così come mostra ancora l'API disponibile.
Maggio 2019
Lancio di OR-Tools v7.1
Abbiamo rilasciato OR-Strumenti v7.1. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Modifiche alle dipendenze richieste
OR-Tools v7.1 presenta le seguenti dipendenze nuove e aggiornate:
- glog versione 0.3.5 aggiornata alla versione 0.4.0
- protobuf versione 3.6.1 aggiornata alla versione 3.7.1
- Cbc 2.9.9 aggiornato alla versione 2.10.1
- Cgl 0.59.10 aggiornato alla versione 0.60.1
- Clp 1.16.11 aggiornato alla versione 1.77.1
- Osi 0.107.9 aggiornato a 0.108.1
- CoinUtils 2.10.14 aggiornato alla versione 2.11.1
Modifiche all'API CP-SAT
Le seguenti sezioni descrivono le modifiche all'API CP-SAT in OR-Strumenti 7.1.
- Utilizzare il dominio per creare variabili.
- Utilizzo di Dominio in un'espressione lineare.
- Utilizzo di assistenti per le espressioni lineari.
Utilizzo del dominio per creare variabili
Gli esempi riportati di seguito mostrano come creare una variabile intera con domini non contigui.
Questo sostituisce il metodo rimosso NewEnumeratedIntVar()
.
In questo caso, la variabile x può essere qualsiasi tra 1, 3, 4 o 6:
Python
model.NewIntVarFromDomain(cp_model.Domain.FromValues([1, 3, 4, 6]), 'x')
C++
model.NewIntVar(Domain::FromValues({1, 3, 4, 6}));
Java
model.newIntVarFromDomain(Domain.fromValues(new long[] {1, 3, 4, 6}), "x");
C#
model.NewIntVarFromDomain(Domain.FromValues(new long[] {1, 3, 4, 6}), "x");
Puoi creare variabili anche utilizzando un elenco di intervalli. Di seguito, la variabile x è vincolata a 1, 2, 4, 5 o 6:
Python
model.NewIntVarFromDomain(cp_model.Domain.FromIntervals([[1, 2], [4, 6]]), 'x')
C++
model.NewIntVar(Domain::FromIntervals({ {1, 2}, {4, 6} }));
Java
model.newIntVarFromDomain(Domain.fromIntervals(new long[][] { {1, 2}, {4, 6} }), "x");
C#
model.NewIntVarFromDomain(Domain.FromIntervals(new long[][] { new long[] {1, 2}, new long[] {4, 6} }), "x");
Utilizzo di Domain in un'espressione lineare
I seguenti esempi mostrano come limitare un'espressione lineare in un dominio non contiguo. Qui l'espressione lineare linear_expr è definita su 5, 6, 8, 9 e 10:
Python
model.AddLinearExpressionInDomain(linear_expr, cp_model.Domain.FromIntervals([(5, 6), (8, 10)]))
C++
model.AddLinearConstraint(linear_expr, Domain::FromIntervals({ {5, 6}, {8, 10} }))
Java
model.addLinearExpressionInDomain(linear_expr, Domain.fromIntervals(new long[][] { {5, 6}, {8, 10} }))
.Net
model.AddLinearExpressionInDomain(linear_expr, Domain.FromIntervals(new long[][] {new long[] {5, 6}, new long[] {8, 10} }));
Utilizzo di aiutanti delle espressioni lineari
I seguenti esempi mostrano come utilizzare metodi helper per creare somme e prodotti scalari.
Ecco alcuni esempi in cui vogliamo x + y == 20
e 4 * x + 2 * y = 56
:\
Python
model.Add(x + y == 20) model.Add(4 * x + 2 * y == 56)
C++
cp_model.AddEquality(LinearExpr::Sum({x, y}), 20); cp_model.AddEquality(LinearExpr::ScalProd({x, y}, {4, 2}), 56);
Java
model.addEquality(LinearExpr.sum(new IntVar[] {x, y}), 20); model.addEquality(LinearExpr.scalProd(new IntVar[] {x, y}, new long[] {4, 2}), 56);
.Net
model.Add(x + y == 20); model.Add(4 * x + 2 * y == 56);
Marzo 2019
Lancio di OR-Strumenti v7.0
Abbiamo rilasciato OR-Strumenti v7.0. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Modifiche alle piattaforme supportate
OR-Tools v7.0 non supporta più le seguenti piattaforme:
- Visual C++ 2015
- Ubuntu 14.04
- Python 3.4 su Linux
Se usi una di queste piattaforme, puoi comunque installare OR-Tools v6.10.
Modifiche alle dipendenze richieste
OR-Tools v7.0 presenta le seguenti dipendenze nuove e aggiornate:
- Novità: Abseil-cpp
- gflags 2.2.1 aggiornato alla versione 2.2.2
Le seguenti sezioni descrivono le nuove funzionalità e i miglioramenti di OR-Strumenti 7.0.
- Nuovo gestore degli indici per i programmi di routing
- Supporto dei VRP con ritiri e consegne
- Supporto per le funzioni lambda in Java e C#
Nuovo sistema di gestione degli indici per i programmi di routing
In OR-Tools v7.0, i programmi di routing dei veicoli devono utilizzare il nuovo RoutingIndexManager
.
Ciò garantisce che gli indici standard per le località siano coerenti con gli indici interni utilizzati dal risolutore e contribuisce a evitare errori nel codice.
Il nuovo RoutingIndexManager
richiede alcune modifiche di minore entità ai programmi di routing, descritti nelle seguenti sezioni:
- Includi o importa
RoutingIndexManager
in C++ e Java. - Dichiara
RoutingIndexManager
- Aggiungi
RoutingIndexManager
ai callback delle dimensioni. - Usa
RoutingIndexManager
per stampare soluzioni.
Includi/importa RoutingIndexManager
In OR-Tools 7.0, i programmi di routing in C++ e Java devono includere o importare RoutingIndexManager
come mostrato negli esempi seguenti:
C++
#include "ortools/constraint_solver/routing_index_manager.h"
Java
import com.google.ortools.constraintsolver.RoutingIndexManager;
Le importazioni Python e C# non sono state modificate.
Dichiara RoutingIndexManager
In OR-Tools v7.0, i programmi di routing devono dichiarare RoutingIndexManager
e creare il modello di routing, come mostrato negli esempi seguenti:
Python
manager = pywrapcp.RoutingIndexManager(num_locations, num_vehicles, depot) routing = pywrapcp.RoutingModel(manager)
C++
RoutingIndexManager manager(num_locations, num_vehicles, depot); RoutingModel routing(manager);
Java
RoutingIndexManager manager = new RoutingIndexManager(numLocations, numVehicles, depot); RoutingModel routing = new RoutingModel(manager);
.Net
RoutingIndexManager manager = new RoutingIndexManager(numLocations, numVehicles, depot); RoutingModel routing = new RoutingModel(manager);
Gli argomenti per RoutingIndexManager
sono:
- Il numero di sedi
- Il numero di veicoli
- L'indice del deposito (località di partenza e di arrivo per tutti i veicoli)
Callback
In OR-Tools v7.0, devi utilizzare RoutingIndexManager
per creare callback, ad esempio il callback di distanza, che poi passi al risolutore.
I seguenti esempi mostrano come creare un callback di distanza.
Python
def distance_callback(from_index, to_index): """Returns the distance between the two nodes.""" # Convert from routing variable Index to distance matrix NodeIndex. from_node = manager.IndexToNode(from_index) to_node = manager.IndexToNode(to_index) return data["distance_matrix"][from_node][to_node] transit_callback_index = routing.RegisterTransitCallback(distance_callback) routing.SetArcCostEvaluatorOfAllVehicles(transit_callback_index)
C++
const int transit_callback_index = routing.RegisterTransitCallback( [&data, &manager](const int64_t from_index, const int64_t to_index) -> int64_t { // Convert from routing variable Index to distance matrix NodeIndex. const int from_node = manager.IndexToNode(from_index).value(); const int to_node = manager.IndexToNode(to_index).value(); return data.distance_matrix[from_node][to_node]; }); routing.SetArcCostEvaluatorOfAllVehicles(transit_callback_index);
Java
final int transitCallbackIndex = routing.registerTransitCallback((long fromIndex, long toIndex) -> { // Convert from routing variable Index to user NodeIndex. int fromNode = manager.indexToNode(fromIndex); int toNode = manager.indexToNode(toIndex); return data.distanceMatrix[fromNode][toNode]; }); routing.setArcCostEvaluatorOfAllVehicles(transitCallbackIndex);
.Net
int transitCallbackIndex = routing.RegisterTransitCallback((long fromIndex, long toIndex) => { // Convert from routing variable Index to // distance matrix NodeIndex. var fromNode = manager.IndexToNode(fromIndex); var toNode = manager.IndexToNode(toIndex); return data.DistanceMatrix[fromNode, toNode]; }); routing.SetArcCostEvaluatorOfAllVehicles(transitCallbackIndex);
Il metodo IndexToNode
converte gli indici di posizione interni utilizzati dal risolutore negli indici standard per la matrice di distanza.
Anziché passare il callback direttamente al risolutore, come nelle versioni precedenti, nella v7.0 devi prima creare transit callback index
, un riferimento al callback, e passarlo al risolutore (in questo caso tramite SetArcCostEvaluatorOfAllVehicles
).
Dimensioni
I seguenti esempi mostrano come creare una dimensione per le richieste e le capacità, che viene utilizzata per risolvere il problema di routing dei veicoli abilitati.
Python
def demand_callback(from_index): """Returns the demand of the node.""" # Convert from routing variable Index to demands NodeIndex. from_node = manager.IndexToNode(from_index) return data["demands"][from_node] demand_callback_index = routing.RegisterUnaryTransitCallback(demand_callback) routing.AddDimensionWithVehicleCapacity( demand_callback_index, 0, # null capacity slack data["vehicle_capacities"], # vehicle maximum capacities True, # start cumul to zero "Capacity", )
C++
const int demand_callback_index = routing.RegisterUnaryTransitCallback( [&data, &manager](const int64_t from_index) -> int64_t { // Convert from routing variable Index to demand NodeIndex. const int from_node = manager.IndexToNode(from_index).value(); return data.demands[from_node]; }); routing.AddDimensionWithVehicleCapacity( demand_callback_index, // transit callback index int64_t{0}, // null capacity slack data.vehicle_capacities, // vehicle maximum capacities true, // start cumul to zero "Capacity");
Java
final int demandCallbackIndex = routing.registerUnaryTransitCallback((long fromIndex) -> { // Convert from routing variable Index to user NodeIndex. int fromNode = manager.indexToNode(fromIndex); return data.demands[fromNode]; }); routing.addDimensionWithVehicleCapacity(demandCallbackIndex, 0, // null capacity slack data.vehicleCapacities, // vehicle maximum capacities true, // start cumul to zero "Capacity");
.Net
int demandCallbackIndex = routing.RegisterUnaryTransitCallback((long fromIndex) => { // Convert from routing variable Index to // demand NodeIndex. var fromNode = manager.IndexToNode(fromIndex); return data.Demands[fromNode]; }); routing.AddDimensionWithVehicleCapacity(demandCallbackIndex, 0, // null capacity slack data.VehicleCapacities, // vehicle maximum capacities true, // start cumul to zero "Capacity");
Soluzioni di stampa
In OR-Tools v7.0, devi utilizzare RoutingIndexManager
per visualizzare i percorsi
del veicolo in una soluzione. Gli esempi riportati di seguito mostrano come stampare soluzioni in tutte
le lingue supportate.
Python
def print_solution(manager, routing, solution): """Prints solution on console.""" print(f"Objective: {solution.ObjectiveValue()}") index = routing.Start(0) plan_output = "Route for vehicle 0:\n" route_distance = 0 while not routing.IsEnd(index): plan_output += f" {manager.IndexToNode(index)} ->" previous_index = index index = solution.Value(routing.NextVar(index)) route_distance += routing.GetArcCostForVehicle(previous_index, index, 0) plan_output += f" {manager.IndexToNode(index)}\n" plan_output += f"Distance of the route: {route_distance}m\n" print(plan_output)
C++
//! @brief Print the solution //! @param[in] manager Index manager used. //! @param[in] routing Routing solver used. //! @param[in] solution Solution found by the solver. void PrintSolution(const RoutingIndexManager& manager, const RoutingModel& routing, const Assignment& solution) { LOG(INFO) << "Objective: " << solution.ObjectiveValue(); // Inspect solution. int64_t index = routing.Start(0); LOG(INFO) << "Route for Vehicle 0:"; int64_t distance{0}; std::stringstream route; while (!routing.IsEnd(index)) { route << manager.IndexToNode(index).value() << " -> "; const int64_t previous_index = index; index = solution.Value(routing.NextVar(index)); distance += routing.GetArcCostForVehicle(previous_index, index, int64_t{0}); } LOG(INFO) << route.str() << manager.IndexToNode(index).value(); LOG(INFO) << "Distance of the route: " << distance << "m"; LOG(INFO) << ""; LOG(INFO) << "Advanced usage:"; LOG(INFO) << "Problem solved in " << routing.solver()->wall_time() << "ms"; }
Java
/// @brief Print the solution. static void printSolution( DataModel data, RoutingModel routing, RoutingIndexManager manager, Assignment solution) { // Solution cost. logger.info("Objective : " + solution.objectiveValue()); // Inspect solution. logger.info("Route for Vehicle 0:"); long routeDistance = 0; String route = ""; long index = routing.start(0); while (!routing.isEnd(index)) { route += manager.indexToNode(index) + " -> "; long previousIndex = index; index = solution.value(routing.nextVar(index)); routeDistance += routing.getArcCostForVehicle(previousIndex, index, 0); } route += manager.indexToNode(routing.end(0)); logger.info(route); logger.info("Distance of the route: " + routeDistance + "m"); }
.Net
/// <summary> /// Print the solution. /// </summary> static void PrintSolution(in RoutingModel routing, in RoutingIndexManager manager, in Assignment solution) { Console.WriteLine("Objective: {0}", solution.ObjectiveValue()); // Inspect solution. Console.WriteLine("Route for Vehicle 0:"); long routeDistance = 0; var index = routing.Start(0); while (routing.IsEnd(index) == false) { Console.Write("{0} -> ", manager.IndexToNode((int)index)); var previousIndex = index; index = solution.Value(routing.NextVar(index)); routeDistance += routing.GetArcCostForVehicle(previousIndex, index, 0); } Console.WriteLine("{0}", manager.IndexToNode((int)index)); Console.WriteLine("Distance of the route: {0}m", routeDistance); }
Supporto per i VRP con ritiri e consegne
OR-Tools v7.0 fornisce supporto per la risoluzione dei problemi relativi al routing dei veicoli (VRP) con
ritiro e consegne, in cui l'obiettivo è trovare i percorsi più brevi per un
parco di veicoli che ritira e consegna gli articoli in varie località. Imposta il problema in modo simile a un VRP standard, ma oltre a specificare una coppia di località (i, j)
per ogni articolo, dove i è il luogo di ritiro e j è il luogo di consegna. Il risolutore di percorso restituisce i percorsi dei veicoli in modo che, per ogni coppia (i, j)
, i
e j
, si trovino sullo stesso percorso e il veicolo visiti il percorso i
prima del giorno j
.
Per un esempio che risolve questo tipo di problema, consulta Routing dei veicoli con pick-up e consegne.
Supporto per le funzioni lambda
OR-Tools v7.0 include ora il supporto per le funzioni lambda in C# e Java (oltre a C++ e Python, già supportati). Le funzioni lambda offrono un modo conveniente per definire i callback nei programmi di routing. Tuttavia, puoi definire i callback utilizzando le funzioni standard se ritieni che il codice renda più leggibile.
Gli esempi di callback C# e Java riportati sopra mostrano come definire i callback utilizzando le funzioni lambda.
Novembre 2018
Annuncio del rilascio della versione v6.10
Abbiamo rilasciato OR-Tools versione 6.10. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Le seguenti sezioni descrivono le nuove funzionalità e i miglioramenti apportati alla versione 6.10.
Comandi semplificati per creare ed eseguire programmi
Nella versione 6.10 puoi creare ed eseguire programmi inserendo comandi come segue:
make run SOURCE=relative/path/to/program.ccdove
<var>relative/path/to</var>
è il percorso della directory contenente il
programma.
Per creare un programma senza eseguirlo, inserisci:
make build SOURCE=relative/path/to/program.ccConsulta Inizia a utilizzare OR-Strumenti per istruzioni specifiche sull'esecuzione di programmi in base alla lingua.
Supporto per SCIP 6.0.0
OR-Tools ora fornisce supporto per SCIP 6.0.0.
Programmi binari
Le distribuzioni binarie sono state create usando Java JDK 8 (JDK 7 per Ubuntu 14.04).
Risolutore CP-SAT
Aggiorna l'API
- Aggiungi l'API CpModelBuilder CP-SAT C++.
Esempi
Alcuni esempi sono stati spostati.
- Sposta gli esempi di community in
examples/contrib
. - Sposta alcuni esempi in
ortools/<var>component</var>/samples
(ad es.ortools/linear_solver/samples/simple_program.java
)
Settembre 2018
Annuncio del rilascio della versione v6.9
Abbiamo rilasciato OR-Tools versione 6.9. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Dipendenze aggiornate
- Protobuf 3.5.1 -> 3.6.1.
- SCIP 4.0 -> 6.0.
Risolutore CP-SAT
- Modifiche che provocano un errore all'API: i dettagli completi sono disponibili qui:
- Rinomina
SolveWithSolutionObserver
inSolveWithSolutionCallback
in Python. Rinomina
NewSolution
inOnSolutionCallback
nella classeCpSolverSolutionCallback
in Python. L'esempio seguente mostra il nuovo modo per creare un callback della soluzione in Python.class MySolutionCallback(cp_model.CpSolverSolutionCallback): def init(self): cpmodel.CpSolverSolutionCallback.init(self) self._solution_count = 0
def OnSolutionCallback(self): print('Solution {}, time = {}s, objective = {}, makespan = {}'.format( self.solution_count, self.WallTime(), self.ObjectiveValue(), self.Value(makespan))) self.solution_count += 1
Esponi
StopSearch
sul callback della soluzione in Python, Java e C#. La documentazione è disponibile qui.Esponi
ModelStats
eCpSolverResponseStats
in Python, Java e C#.Migliora la documentazione relativa alla docstring Python. La documentazione è disponibile qui.
Aggiornamenti all'implementazione Java dell'interfaccia del risolutore e del libro di ricette.
Implementa il modulo.
Modifica l'implementazione del serbatoio: aggiungi un'API con valore booleano per specificare eventi di svuotamento/riempimento facoltativi.
Linear Solver
- Esponi
InterruptSolve
in Java e C#.
Risolutore CP
- Esponi
SolutionCollector
regista in C#.
Python
- Aggiungi il supporto per
Python 3.7
. - Durante la compilazione dal codice sorgente: preferisci
python3
rispetto apython2
durante il rilevamento di Python.
.NET
- Riscrittura completa del livello .NET.
- Fornisci un pacchetto Nuget
Google.OrTools
NetStandard 2.0 compatibile con l'identificatore runtimewin-x64
,linux-x64
eosx-x64
. - Fornisci un pacchetto Nuget
Google.OrTools.FSharp
. - Aggiungi un file di progetto per tutti gli esempi .NET.
- Aggiorna tutti gli esempi di script F# (.fsx) in un progetto F# normale (.fs).
- Aggiungi la documentazione sulla generazione delle build dei pacchetti .NET qui.
Flazinco
- Aggiungi il supporto per i set in flatzinc (utilizzando nosets.mzn).
Contributi
- Aggiungi il supporto per Binder. Grazie a Kevin Mader.
- Imposta
DecisionVisitor
come tipo di Director nelle associazioni Java. Grazie a Jeremy Apthorp.
Luglio 2018
Annuncio del rilascio della versione v6.8
Abbiamo rilasciato OR-Tools versione 6.8. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Presentazione del risolutore CP-SAT
Il risolutore CP-SAT è un nuovo risolutore per la programmazione di vincoli. Il risolutore CP-SAT è più veloce del risolutore CP originale e dovrebbe essere preferibile per i problemi CP.
Per gli esempi che utilizzano il risolutore CP-SAT, nella directory examples di GitHub cerca i file che contengono _sat
nel nome.
Il risolutore CP originale continuerà a essere mantenuto per un certo periodo di tempo per supportare il codice esistente, ma sarà deprecato.
Nuove opzioni per il risolutore CP-SAT
Le seguenti opzioni per il risolutore CP-SAT sono nuove in questa release:
- Ricerca nel quartiere locale (LNS): usa l'opzione
SatParameters.use_lns
per attivare LNS. - Ricerca parallela: utilizza l'opzione
SatParameters.num_search_workers
per abilitare più thread durante una ricerca. Ogni thread può avere parametri diversi e seed casuali diversi. Questo massimizza la diversità e la probabilità che almeno un thread trovi soluzioni.
Miglioramenti delle prestazioni per i risolutori
Abbiamo migliorato le prestazioni dei risolutori CP-SAT e Glop.
Marzo 2018
Annuncio del rilascio della versione v6.7
Abbiamo rilasciato OR-Tools versione 6.7. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR.
Aggiorna alle dipendenze richieste
- Protobuf 3.5.0 -> 3.5.1.
Varie
- Esegui il refactoring della base per preparare l'integrazione abseil-cpp.
- Utilizzo dei servizi di integrazione continua (CI) di Travis CI e di Appveyor.
SAT
- Miglioramento del rendimento.
- Migliora l'API Python.
- Aggiungi l'API C# nota anche come CpSolver.cs (SPERIMENTALE).
Glop
- Refactoring del codice.
- Miglioramento del rendimento.
Assistenza CMake (SPERIMENTALE)
- Aggiungi l'assistenza di CMake su C++ OR-Tools.
- Essere in grado di creare OR-Tools come progetto CMake autonomo.
- Essere in grado di incorporare OR-Tools in un progetto CMake esistente.
- Aggiungi la build basata su CMake Python OR-Tools.
- Genera un pacchetto Python (wheel) utilizzando CMake.
Contributi
- Correggi la ridefinizione di WHOIS.h sulle finestre. Grazie a Florent Tollin de Rivarol.
- Aggiungi supporto F# (SPERIMENTALE). Grazie a Matthew Moore. Nota: disponibile solo con il builder di Makefile.
- Aggiungi il supporto standard .NET (SPERIMENTALE). Grazie a Ziad El Malki. Nota: disponibile solo con il builder di Makefile.
Novembre 2017
Annuncio del rilascio della versione v6.6
Abbiamo rilasciato OR-Tools versione 6.6. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Aggiornamenti alle dipendenze richieste
- Protobuf a 3.3.0 -> 3.5.0.
- gflags in 2.2.0 -> 2.2.1.
- CBC 2.9.8 -> 2.9.9.
- Aggiungi il modulo Python sei (1.10) come dipendenza richiesta per Python.
Correzioni di bug
- Richiesta di pull n. 494 Refactoring dei nomi. L'aggiunta di commenti per IntelliSense in alcuni editor. Grazie a Matthew Moore.
- Istruzione di pull #516 per il programma binario autonomo F#. Grazie a Matthew Moore.
- Migliora la precisione in Glop.
Risolutore SAT
- Migliorare il risolutore SAT interno, correggere vari bug.
- Aggiungi un vincolo VRP al risolutore SAT, collegato al risolutore LP.
- Cambia l'osservatore della soluzione nel risolutore SAT per utilizzare
CpSolverResponse
come parametro. - Migliora l'utilizzo di Glop nel Risolutore SAT.
- Velocizza la connessione SAT-LP.
- Aggiungi il vincolo Reservoir al formato SAT cp_model protobuf.
SAT/Python
- Introduzione dell'API SAT in Python.
- Codice in
ortools/sat/python/cp_model.py
. - Aggiungi esempi in examples/python/:
- assignment_sat.py
- assignment_with_constraints_sat.py
- code_samples_sat.py
- cp_is_fun_sat.py
- gate_scheduling_sat.py
- hidato_sat.py
- jobshop_ft06_sat.py
- nqueens_sat.py
- nurses_sat.py
- rcpsp_sat.py
- steel_mill_slab_sat.py
- worker_schedule_sat.py
- Aggiungi il supporto per il blocco note di Python.
- Gli esempi Python vengono esportati in blocchi note e sono disponibili in examples/notebook.
Esempi
- Riscrivi rcpsp_parser per utilizzare il formato ProtoBuf per archiviare il problema.
- Migliora il parser RCPSP.
Ottobre 2017
Annuncio del rilascio della versione v6.5
Abbiamo rilasciato OR-Tools versione 6.5. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Variazione nelle piattaforme
- Il modulo pypi py3-ortools è stato unito nel modulo ortools. Ora esiste un solo modulo: "ortools".
- Il formato principale di questi moduli Python ora sono i file wheel.
Per installare OR-Tools per Python da pypi, esegui
pip install ortools
. È necessaria una versione recente di pip installata (>= 9.0.1). Ciò dovrebbe generare il pull della release più recente (v6.5).
Bug fixed
Il file jar protobuf ora viene creato correttamente con le classi compilate.
Nuovi esempi
- Sono stati aggiunti altri esempi F# alla directory example/fsharp (grazie ancora a Matthew Moore).
- Sono stati aggiunti anche esempi di MIP in Java (Grazie Darian).
Settembre 2017
Annuncio del rilascio della versione v6.4
Abbiamo rilasciato OR-Tools versione 6.4. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Variazione nelle piattaforme
- I moduli Pypi sulle piattaforme Linux vengono ora pubblicati come file wheel utilizzando il tag Manylinux1. Grazie a Federico Ficarelli. In seguito a questa modifica, abbiamo eseguito il backtracciamento dei moduli per Linux introdotti nella release di luglio 2017.
Nuove funzionalità
- Metodo di scalabilità migliorato utilizzato in GLOP.
- Correggi il wrapping dei valutatori nella libreria di routing C#. Grazie a DevNamedZed.
- Migliora le prestazioni della presolvenza flatzinc per i modelli di grandi dimensioni.
- Per impostazione predefinita, utilizza il supporto SAT per flatzinc.
- Migliorare le prestazioni dell'approccio basato su core per il risolutore sat.
- Correggere un bug nell'algoritmo di assegnazione lineare che non funzionava correttamente.
- Sono stati aggiunti gli esempi F# in ortools/examples/fsharp.
- Rimuovi il segno di spunta per penalità positive nella libreria di routing.
Agosto 2017
Annuncio del rilascio della versione v6.3
Abbiamo rilasciato OR-Tools versione 6.3. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Nuovi file scaricati
I file wheel Python per Linux sono ora disponibili per il download nella pagina di rilascio di OR-Tools, insieme alle versioni più recenti di tutti i download.
Risolutore di zinco
Questa versione contiene il codice sat e flatzinc finale inviato per la sfida Minizinc 2017.
Luglio 2017
Annuncio del rilascio della versione v6.2
Abbiamo rilasciato OR-Tools versione 6.2. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Variazione nelle piattaforme
- Ora supportiamo più distribuzioni binarie Linux (Ubuntu 14.04, 16.04, 17.04, CentOS 7, Debian 9).
- I moduli Pypi sulle piattaforme Linux ora includono un tag che descrive la distribuzione (ubuntu-14.04, ubuntu-16.04, ubuntu-17.04, centos-7, debian-9).
Nuove funzionalità
Abbiamo aggiunto il supporto per Docker per la creazione di artefatti di Linux. Vai a
or-tools/tools/docker
e guarda Makefile
per vedere i possibili target
(make archive
, make pypi
e make pypi3
).
Questi comandi creano una sottodirectory export
e aggiungono artefatti binari al suo interno.
Giugno 2017
Annuncio del rilascio della versione v6.1
Abbiamo rilasciato OR-Tools versione 6.1. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Variazione nelle piattaforme
- Visual Studio 2017 è supportato; Visual Studio 2013 non è più supportato.
- macOS 10.9 e versioni successive sono supportate.
Nuove funzionalità
Abbiamo aggiunto un nuovo formato protobuf per il risolutore CP-SAT.
Leggi ortools/sat/cp_model.proto
per definire il modello e
ortools/sat/cp_model_solver.h
per risolvere il problema.
Correzioni di bug
Questione n. 420: abbiamo corretto l'attributo __version__
mancante sui moduli pypi Python su tutte le piattaforme.
Maggio 2017
Annuncio del rilascio della versione v6.0
Abbiamo rilasciato OR-Tools versione 6.0. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Nuova struttura di directory in C++
Abbiamo modificato la struttura di origine/inclusione degli strumenti OR quando si utilizza C++. L'obiettivo è fornire un incapsulamento migliore dei file di inclusione di C++. Ha anche il vantaggio di allineare le strutture delle directory C++ e Python.
src/
è stato rinominato inortools/
.- A tutti i comandi #include nei file C++ viene aggiunto il prefisso
ortools
.#include "constraint/constraint_solver.h"
ora è#include "ortools/constraint/constraint_solver.h"
.
Nuove funzionalità
- Assistenza Bazel.
Ora puoi creare OR-Strumenti con bazel, lo strumento di creazione di Google. Funziona su Linux e Mac OS X. Dopo aver scaricato Bazel versione 0.4.5 o successive, cambia la directory in or-tools e crea gli esempi:
bazel build examples/cpp/...
.
Routing
Nella libreria dei percorsi, abbiamo implementato il supporto per le pause (ad es. tempi di inattività del veicolo dovuti al pranzo
con i conducenti). Questa funzionalità è mostrata nell'esempio di cvrptw_with_breaks.cc
.
Supporto SCIP
Il wrapper del risolutore lineare ora supporta SCIP 4.0. Ora devi prima creare SCIP e poi indicare agli strumenti che lo utilizzerai. Le istruzioni sono disponibili qui.
Supporto di GLPK
Abbiamo anche cambiato il modo di usare le build con GLPK. Leggi qui.
Pulizia
- Abbiamo rimosso qualsiasi utilizzo di hash_map e hash_set dal codebase C++ poiché sono deprecati. Sono stati sostituiti da unordered_map e unordered_set da STL.
- Pulizia dei makefile di C#, gentilmente concessa da Michael Powell.
Gennaio 2017
Annuncio del rilascio della versione v5.1
Abbiamo rilasciato OR-Tools versione 5.1. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Nuove funzionalità
Installazione in corso…
- Introduzione di procedure più semplici per l'installazione di OR-Strumenti, da distribuzioni binarie o da codice sorgente. Per ulteriori informazioni, consulta Installazione di OR-Strumenti dal programma binario o Installazione di strumenti OR dall'origine per ulteriori informazioni.
Routing
È stato implementato un algoritmo per calcolare il limite inferiore di Held-Karp per i problemi simmetrici dei venditori in viaggio. Ciò consente di calcolare un limite superiore per il divario tra il costo di una soluzione potenzialmente non ottimale e il costo della soluzione ottimale.
- È stato aggiunto un nuovo metodo alla libreria di percorsi dei veicoli,
RoutingModel::SetBreakIntervalsOfVehicle
, che ti consente di aggiungere intervalli di break, ovvero periodi di tempo in cui un veicolo non può svolgere alcuna attività (come viaggiare o visitare un nodo). Per un esempio in cui viene utilizzata questa opzione, vedi cvrptw_with_breaks.cc
Programmazione
- Aggiunto il supporto per più formati di dati nell'analizzatore sintattico per la libreria di pianificazione dei progetti.
Risolutore di Sat
- Il vincolo cumulativo del risolutore SAT ora accetta intervalli facoltativi, creati con il metodo
NewOptionalInterval
. Per un esempio, consulta https://github.com/google/or-tools/blob/master/examples/cpp/rcpsp_sat.cc. - Ora puoi risolvere un problema di massima soddisfazione (Max-SAT) specificando l'obiettivo come somma ponderata di valori letterali. Non è più necessario creare una variabile intera intermedia.
Miglioramenti del rendimento
- Risolutore SAT: prestazioni del risolutore Sat migliorate, in particolare per quanto riguarda il vincolo cumulativo.
- Risolutore glop: robustezza numerica del risolutore glop migliorata, che ora restituisce soluzioni ancora più precise a problemi numerici difficili.
- Risolutore di flazinco
- Prestazioni del backend Sat notevolmente migliorate per l'interprete flatzinc.
- È stata semplificata l'interfaccia di C# flatzinc. Per un esempio della nuova interfaccia, consulta la pagina https://github.com/google/or-tools/blob/master/examples/csharp/csfz.cs.
Correzioni di bug
- L'utilizzo dell'euristica
PathCheapestArc
sui modelli di routing con un solo veicolo e vincoli laterali, a volte causa un tempo di esecuzione del risolutore troppo lungo. Questo problema è stato risolto prendendo correttamente in considerazione i vincoli secondari. - In Java, a volte il risolutore di percorso si arrestava in modo anomalo durante la risoluzione dei problemi di routing dei veicoli. Questo problema è stato risolto nell'ultima release.
Novembre 2016
Annuncio del rilascio della versione v5.0
Abbiamo rilasciato OR-Tools versione 5.0. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Esempi in esecuzione
- Sono stati introdotti target specifici per lingua che semplificano la compilazione e l'esecuzione dei programmi, oltre agli esempi forniti con OR-Tools.
Sab
- Aggiunto il supporto per la programmazione di vincoli.
- Sono stati implementati i vincoli diffn, cumulativi , circuito e sottocircuito.
- È stato implementato il controllo di sovraccarico sulla base dell'algoritmo di filtro dell'energia massima per il vincolo cumulativo discreto.
- È stato implementato il propagatore coerente di tutti i diversi associati che implementa una propagazione migliore per il vincolo Alldiversi.
FlatZinc
- È stato implementato un risolutore SAT per i problemi di FlatZinc.
Risolutore dei vincoli
- Sono stati implementati i seguenti vincoli :
- atMost: imposta un limite superiore per il conteggio di variabili uguali a un determinato valore.
- MakePathPrecedenceConstraint e MakePathTransitPrecedenceConstraint: implementa il vincolo di precedenza per un insieme di coppie.
Routing
- È stato implementato AddAtSolutionCallback, ovvero un callback che viene chiamato ogni volta che viene trovata una soluzione durante la ricerca.
- Rimossi i costruttori senza deposito RoutingModel. Ora è obbligatorio specificare almeno un deposito nel modello di routing.
Settembre 2016
Annuncio del rilascio della versione v4.4
Abbiamo rilasciato OR-Tools versione 4.4. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Sab
- API di pianificazione estesa ed esempi modificati (weight_tardiness_sat e jobshop_sat) per utilizzarla.
Grafico
- Sono stati aggiunti trait iteratori alle classi Graph.
Distribuzione OR-Strumenti
- Il pacchetto Nuget è di nuovo supportato.
Agosto 2016
Annuncio del rilascio della versione v4.3
Abbiamo rilasciato OR-Tools versione 4.3. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Risolutore dei vincoli
- Il metodo
NotBetween
è stato implementato per vincolare una variabile al di fuori di un determinato intervallo.
calcolo itinerario
- È stata aggiunta un'analisi del modello per controllare i vincoli
NotMember
esistenti come mostrato in questo esempio e utilizzarli nei filtri di ricerca locale. - È stata aggiunta la profilazione della ricerca locale.
- Correzione per gli spostamenti locali.
Risolutore lineare
- Report sullo stato SCIP corretti.
Sab
- Implementazione del metodo SolveWithPresolve per semplificare l'utilizzo del presolver SAT.
- utils di ricerca riraggruppati in src/sat/util.h|cc.
- Vincoli di pianificazione SMT (Lazy Clause Generation) implementati: consulta jobshop_sat.cc e weighted_tardiness_sat.cc.
Glop
- Sono state migliorate le prestazioni sfruttando la sparsità in più fasi di calcolo.
Flazinco
- Sono stati corretti bug rilevati dalla sfida Minizinc.
Lp_data
- Semplificazione continua dei modelli negli iteratori.
Distribuzione OR-Strumenti
- Gli assiemi C# ora hanno un nome sicuro per impostazione predefinita.
- Aggiornato a Protobuf3.0.0.
- È stato aggiunto uno script Python per controllare le dipendenze di archiviazione di OR-Tools.
Luglio 2016
Annuncio del rilascio della versione v4.2
Abbiamo rilasciato OR-Tools versione 4.2. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Risolutore dei vincoli (routing)
- Una disgiunzione ora può essere definita con una cardinalità, che è il numero massimo di nodi che possono essere attivi all'interno di questa disgiunzione. Ad esempio, se aggiungi una disgiunzione con n nodi e una cardinalità k, possono essere attivi i nodi k tra gli n nodi. A questo scopo, puoi utilizzare la nuova definizione di AddDisjunction.
- Aggiunto il supporto per più disgiunzioni per nodo. Ad esempio, ora puoi aggiungere un nodo N1 a molte disgiunzioni (D1..Dm). Ciò aumenta le possibilità di essere attivo all'interno di uno qualsiasi di essi. È stato introdotto un algoritmo di ricerca dei percorsi più veloce per i problemi relativi alle finestre temporali di disgiunzione.
- Sono stati aggiunti parametri del risolutore di vincoli ai parametri del modello di routing e log_search ai parametri di ricerca di routing.
- L'algoritmo di ricerca locale è più veloce nella risoluzione dei problemi con finestre temporali disconnesse. Consulta l'esempio cvrp_disjoint_tw.cc per ulteriori dettagli.
Glop (ottimizzazione lineare)
- È stato introdotto un algoritmo Simplex più veloce.
Distribuzione OR-Strumenti
- Un archivio per piattaforma, invece che singoli archivi per ognuno degli archivi C++, Java e .Net. Gli archivi Python sono ancora ospitati su pypi.
- Su Pypi, siamo passati ai moduli wheel (.whl) su Mac OS X e Windows. È stato introdotto uno schema di numerazione MAJOR.MINOR. Questi numeri vengono utilizzati i nomi degli archivi, la versione archiviata nelle librerie condivise di Mac OS X, i moduli Python e gli assiemi .NET. La prima versione che stiamo rilasciando è con questo schema la v4.2
Giugno 2016
Annuncio del rilascio della versione v2016-06
Abbiamo rilasciato la versione v2016-06 di OR-Tools. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Risolutore dei vincoli
- Rimossa la maggior parte delle istanze dei callback (src/base/callback.h) dalla libreria CP.
- Aggiunto NotMemberCt (la variabile non può appartenere a un insieme di intervalli).
Libreria di routing
- MODIFICA INCOMPATIBILE: per specificare la capacità dei veicoli in
AddDimensionWithVehicleCapacity
, ora devi passare un array (un vettore in c++) anziché un callback.
GLOP
- Cambia la rappresentazione interna della matrice sparsa.
- Miglioramenti delle prestazioni.
Grafico
- Riscrivi gli algoritmi di Dijkstra e Bellman-Ford per sostituire i callback di
std::function
(C++). - Cambia l'API dell'implementazione dei grafici diversi durante l'iterazione su archi e nodi.
Sab
- Rimuovi il metodo principale inutilizzato (nodi di risoluzione).
- Aggiunta di drat writer per controllare le prove dell'insoddisfabilità.
- Aggiungi preprocessore.
Pupù
- Aggiungi nuovi quartieri.
Esempi
- c++: eliminare il filelinereader negli esempi.
- data: aggiungi problemi di pianificazione su una singola macchina.
Documentazione
- Consulta la nuova documentazione.
Aprile 2016
Annuncio del rilascio della versione v2016-04
Abbiamo rilasciato la versione v2016-04 di OR-Tools. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Dipendenze aggiornate
- Utilizza i protobuf anziché i flag nelle librerie di programmazione e routing dei vincoli. Per informazioni dettagliate, visita la pagina http://or-tools.blogspot.fr/2016/02/heads-up-upcoming-incompatibility-in.html.
Dicembre 2015
Annuncio del rilascio della versione v2015-12
Abbiamo rilasciato la versione v2015-12 di OR-Tools. Per aggiornare la tua versione, consulta la sezione appropriata di Installazione di OR-Strumenti.
Risolutore dei vincoli
- Compatibilità interrotta con la ricerca di grandi quartieri nel risolutore CP (vedi
examples/cpp/ls_api.cc
,examples/python/pyls_api.py
,examples/csharp/csls_api.cs
eexamples/com/google/ortools/sample/LsApi.java
per vedere la nuova API). - È stato pulito il wrapping Python. Supporta la decisione personalizzata nel risolutore CP
(vedi
examples/test/test_cp_api.py
per vedere l'API in azione). - Miglioramenti vari e correzione di diversi bug.
Settembre 2015
Annuncio della prima release su GitHub.
D'ora in poi i file verranno archiviati lì.
Flazinco
- Aggiunti archivi binari per l'interprete di flatzinc (visita il sito www.minizinc.org).
- Contiene alcune correzioni alla versione utilizzata nella sfida.