Nesta página, listamos as mudanças nas ferramentas OU, incluindo novos recursos, correções de bugs e melhorias no código e nos procedimentos de instalação.
Se você tiver problemas ao instalar as ferramentas OR, consulte a seção Solução de problemas nas instruções de instalação das ferramentas OR. Se o seu problema não estiver listado, verifique os problemas no GitHub ou abra um novo e ficaremos felizes em ajudar.
Veja a seguir as notas da versão do OR-Tools, começando pela versão mais recente.
Maio de 2024
Anúncio do lançamento do OR-Tools v9.10
Lançamos o OR-Tools v9.10. Para atualizar sua versão, consulte a seção apropriada em Instalação de ferramentas OU.
Encontre a nota da versão no github (link em inglês).
março de 2024
Anúncio do lançamento do OR-Tools v9.9
Lançamos o OR-Tools v9.9. Para atualizar sua versão, consulte a seção apropriada em Instalação de ferramentas OU.
Encontre a nota da versão no github (link em inglês).
Novembro de 2023
Anúncio do lançamento do OR-Tools v9.8
Lançamos o OR-Tools v9.8. Para atualizar sua versão, consulte a seção apropriada em Instalação de ferramentas OU.
Mudanças na plataforma
- Adicione o Python 3.12.
- Adicionar suporte para o Ubuntu 23.10
Solucionador linear
- Porta
ModelBuilder
para .Net. LogCallback
foi renomeado comoMbLogCallback
para evitar colisões com o LogCallback da SAT- Estender a API ModelBuilder:
- Adicionar restrições de indicador
- Foi adicionado suporte a dicas.
- Adicionar clonagem de modelo.
Opção matemática
- Retrabalho profundo.
Roteamento
- Adiciona o status
ROUTING_OPTIMAL
. - Torne
RoutingModel
não copiável nem móvel. - Correção de algum loop infinito nos operadores de pesquisa local.
- Adição de um struct interno
PickupDeliveryPosition
. - Adição dos métodos
IsPickup()
eIsDelivery()
.
SÁB
- Reduz o consumo de memória para modelos grandes.
- Pesquisa de programação aprimorada.
- adicione packing_precedences_lns.
- otimizar e corrigir o salto de viabilidade.
- Otimização linear da solução e melhor geração de registros.
- Melhoria na resolução de
int_abs
,int_mod
,int_prod
elin_max
- Melhorar o suporte ao Panda
- Poucas correções de bugs.
Registro de alterações do GitHub
Agosto de 2023
Anúncio do lançamento do OR-Tools v9.7
Lançamos o OR-Tools v9.7. Para atualizar sua versão, consulte a seção apropriada em Instalação de ferramentas OU.
Mudanças na plataforma
- Drop Centos-8 (EOL).
- Abandone o Debian 10.
- Remova o Fedora
[33, 36]
(EOL). - Descarte o Ubuntu 18.04 LTS (EOL).
- Lançamento do Python 3.7 (EOL).
- Desative o suporte a
netcore3.1
no CMake (EOL).
Criador de modelos Python
- Permitir o uso de conjuntos de dados e séries do Pandas para criar variáveis.
- consulte a atividade
- consulte bin_packing
- Preencha as informações de digitação
PDLP
- diversas atualizações.
CP-SAT
- Melhorias de desempenho. (viabilidade_salto, lin_max)
- Melhore o gerenciamento de cortes
- Novo worker Object_shave_search dedicado a melhorar o limite inferior do objetivo (ao minimizar)
- Anotações de digitação para o cp_model.py do Python
- Suporte parcial experimental para pandas em cp_model.py
- consulte a atividade
- consulte bin_packing
- Funcionários experimentais com base em violação da pesquisa local:
- ativado com parâmetros: num_violation_ls:xxx
- otimizado para modelo linear (
linear
,bool_or
,bool_and
,at_most_one
,exactly_one
) - funciona corretamente com lin_max, product, division
- suporta no_overlap, cumulativo, circuito, rotas
- desativado com no_overlap_2d
- número recomendado de workers ls:
num_workers
->num_violation_ls
:(8, 1), (16, 2) (24, 3), (32, 4)
Registro de alterações do GitHub
Março de 2023
Anúncio do lançamento do OR-Tools v9.6
Lançamos o OR-Tools v9.6. Para atualizar sua versão, consulte a seção apropriada em Instalação de ferramentas OU.
Mudanças na plataforma
- Foi adicionado suporte ao Fedora 37, 38.
- Solte o Python 3.6 (incompatível com
protobuf
). - Solte o Python 3.7 no macOS (incompatível com
scipy
). - Foi adicionado suporte a
net7.0
no CMake (use-DUSE_DOTNET_7=ON
). - Inclua
netcore3.1
em pacotes nuget .org
Dependências
- SCIP
v801
->v803
(observação: agora o SCIP usa uma licença compatível com OSI) - racha
20220623.1
->20230105.0
- Protobuf
v21.5
->v21.12
- ALTERNAR
4.1.1
- JNA Java
5.11.0
->5.12.1
Bazel
- Foi adicionado suporte a pybind11.
- Adicionado suporte a wrapper Java.
Solucionadores
- PDLP: "dd python wrapper".
- CP-SAT: Melhorias no desempenho.
- GLOP: Ajuste o presolve.
- ModelBuilder: Python: melhoria do suporte a numpy
- Roteamento: melhorias no desempenho (pesquisa local)
Problemas conhecidos:
- CP-SAT: ignorar o subsolidador
pseudo_costs
retorna parâmetros inválidos (consulte 3706, link em inglês).
Novembro de 2022
Anúncio do lançamento do OR-Tools v9.5
Lançamos o OR-Tools v9.5. Para atualizar sua versão, consulte a seção apropriada em Instalação de ferramentas OU.
Mudanças na plataforma
- Inclusão do suporte ao Debian Sid.
- Adicionado suporte ao Fedora 35, 36.
- Adicionar suporte para Ubuntu 22.10.
- Solte o Python 3.6 no macOS.
- Adicionar suporte ao Python 3.11.
Atualização de dependências
- Protobuf
v19.4
->v21.5
. - Solucionador SCIP
v800
->v801
.
CP-SAT
- Melhorias na solução: max(array), as restrições booleanas e as restrições lineares.
- A pesquisa intercalada deve ser determinista em paralelo.
- Cortes lineares: cortes quadrados de limpeza e int_prod; pipeline de corte de regravação.
- Modelo e solução de entrada de impressão digital (visíveis no registro).
- Melhorias na programação.
- O grupo normal de correções de bugs (falha durante a solução, falhas em cortes, soluções inviáveis, modelo inviável no LNS).
GLOP
- Acelere ao reescrever a álgebra linear, bem como a regra de seleção dinâmica.
Solucionador linear
- Adição do
knapsack_interface.cc
. - Mova a API model_builder para o diretório linear_solver (cabeçalhos e amostras).
- Foi adicionado suporte ao Gurobi 10.
Roteamento
- Liberação de poucos analisadores para vários desafios de roteamento.
Agosto de 2022
Anúncio do lançamento do OR-Tools v9.4
Lançamos o OR-Tools v9.4. Para atualizar sua versão, consulte a seção apropriada em Instalação de ferramentas OU.
Plataformas
- Adicione o suporte ao Debian-10 (consulte #3029).
- Adicione suporte ao Ubuntu 22.04 LTS (consulte #3276). Observação: não haverá suporte ao .Net 3.1 (consulte dotnet/core#7038).
- Remoção do suporte ao Ubuntu 21.10.
Diversos
- O arquivo foi dividido por idiomas e a configuração do CMake foi adicionada à do C++ (#3200).
Gráfico
Dividir ortools.graph.pywrapgraph
em:
ortools.graph.python.linear_sum_assignment
.ortools.graph.python.max_flow
.ortools.graph.python.min_cost_flow
.
Isso permite usar o numpy para acelerar a configuração dos problemas.
CP-SAT
Melhorias em:
- Programação (propagação, cortes, limites inferiores).
- MaxSAT (presolve, heurística baseada no núcleo).
- Desempenho do MIP (presolve, cortes).
Março de 2022
Anúncio do lançamento do OR-Tools v9.3
Lançamos o OR-Tools v9.3. Para atualizar sua versão, consulte a seção apropriada em Instalação de ferramentas OU.
Mudanças na plataforma
- Remoção do suporte a Debian-10.
- Remoção do suporte ao Ubuntu-16.04.
- Solte o .NET Framework 4.5.2.
Atualização de dependências
- O Eigen
3.4.0
foi adicionado. - Adição do
2021-11-01
do Google re2. - Protobuf
3.19.1
->3.19.4
. - SCIP
7.0.1
->v800
.
Python
- Adição de pybind11.
Recursos
- O PDLP foi adicionado como experimental.
- Adição de MathOpt como experimental
CP-SAT
- Algumas APIs foram renomeadas para fins de consistência,
por exemplo,
LinearExpr.ScalProd.
->LinearExpr.WeightedSum.
- Adição de métodos
AddAtLeastOne
/AddAtMostOne
/AddExactlyOne
. - Adicionar
AddMultiplicationConstraint(z, x, y)
em todos os idiomas. - Adicionar
AddMultipleCircuit()
em todos os idiomas.
C++
- Usuário explícito
IntVar(BoolVar)
. LinearExpr::Add*
foi removido e substituído pelo operador, por exemplo,LinearExpr +=
.- Adicionar operadores aritméticos em uma expressão linear.
LinearExpr::BooleanSum/BooleanScalProd
foi removido. UseSum/WeightedSum
- Adicione
CpModelBuilder::FixVariable()
, que substitui o domínio da variável por um único valor.
Java
- Reescreva
LinearExpr
e adicione uma classe builder incremental:LinearExpr.newBuilder().add(x).addSum(<array of variables>).build()
. - Siga a API C++:
Circuit
,MultipleCircuit
,Cumulative
,Reservoir
,AllowedAssignment
eForbiddenAssignment
agora retornam uma classe especializada com API incremental para adicionar novas variáveis, termos, demandas...
C
- Documentar todos os métodos.
- Siga a API C++:
Circuit
,MultipleCircuit
,Cumulative
,Reservoir
,AllowedAssignment
eForbiddenAssignment
agora retornam uma classe especializada com API incremental para adicionar novas variáveis, termos, demandas... - A classe
LinearExprBuilder
foi adicionada para criar expressões de maneira incremental.
Sistema de compilação
CMake
- Exige pelo menos o CMake >= 3.18.
Fabricante
- Agora use o build baseado no CMake internamente.
Dezembro de 2021
Anúncio do lançamento do OR-Tools v9.2
Lançamos o OR-Tools v9.2. Para atualizar sua versão, consulte a seção apropriada em Instalação de ferramentas OU.
Mudanças na plataforma
- Adicione suporte para o Ubuntu 21:10 (última versão contínua).
Atualização de dependências
- Atualização do .Net TFM para net5.0 -> net6.0 (necessita do .Net SDK 6.0 LTS e do .Net SDK 3.1 LTS).
- abseil-cpp 20210324.2 -> 20211102.0.
- Protobuf 3.18.0 -> 3.19.1.
- Googletest 1.10.0 -> 1.11.0
- Python: adicione numpy >= 1.13.3.
- No MacOS, compile o Coin-OR em
-O1
para evitar falhas nos executores.
Roteamento
- Melhoria nos filtros.
- Melhorar a heurística da primeira solução.
- Melhore as posições de intervalo de tempo.
CP-SAT
Alterações importantes
- O buffer de protocolo subjacente é incompatível com versões anteriores. Qualquer buffer de protocolo armazenado precisará ser gerado novamente com as APIs do builder atualizadas (em C++, Python, Java e .NET).
- Em particular, o protobuf de intervalo foi limpo à medida que removemos os campos antigos (
start, size e end) e renomeamos os novos (usando
_view
) para usar o nome dos campos removidos.
Novos recursos
- As restrições
all_different
,reservoir
,modulo
,multiplication
edivision
aceitam expressões afins (a * var + b
) em todos os lugares em que exigem variáveis inteiras. - O objetivo aceita coeficientes de ponto flutuante. Consulte a classe
DoubleLinearExpr
em C++/Java/.NET. Veja o exemploknapsack_2d_sat.py
em Python. - A restrição
no_overlap_2d
é compatível com intervalos opcionais. - A API C++ implementa os operadores
+
e*
para criar expressões.
Melhorias
- Melhoria no código presolve.
- Verificador de modelos mais estrito.
- Restrição de reservatório.
- Adicione cortes intensos para a restrição no_overlap_2d.
- Melhoria no relaxamento linear das restrições de codificação
(
literal implies var == value
).
Métodos descontinuados e removidos
- O uso de
BooleanSum
eBooleanScalProd
do C++ foi descontinuado. Basta usarSum
eScalProd
. - Remoção de
AddLinMinEquality
eAddLinMaxEquality
do C++. Basta usarAddMinEquality
eAddMaxEquality
.
Futuras incompatibilidades
- No futuro, reescreveremos a camada de modelagem do Java para ficar mais próxima da camada C++.
- Na camada de modelagem do C++, tornaremos o filtro IntVar(BoolVar var) explícito.
- Estamos pensando em tornar a API Python compatível com PEP 8 (usando nomes do Snake_case). Se isso acontecer, forneceremos um arquivo sed para transferir o código.
Sistema de compilação
Bazel
- O build do Windows foi corrigido.
CMake
- Adicione a opção
FETCH_PYTHON_DEPS
(o padrão éON
). - Foi adicionado suporte opcional para o solucionador GPLK (padrão
-DUSE_GLPK=OFF
).
Python
- Compatibilidade com números inteiros
numpy
na maior parte da API CP-SAT. - Correção do
__version__
ausente
Setembro de 2021
Anúncio do lançamento do OR-Tools v9.1
Lançamos o OR-Tools v9.1. Para atualizar sua versão, consulte a seção apropriada em Instalação de ferramentas OU.
Mudanças na plataforma
- Python: use a imagem
manylinux2014
(consulte PEP 599). - Python: adicione suporte para o Linux aarch64 usando a imagem
manylinux2014_aarch64
. - .Net: adicione suporte para .Net 5.0.
Atualização de dependências
- abseil-cpp 20210324.1 -> 20210324.2.
- Protobuf 3.15.8 -> 3.18.0.
- SCIP 7.0.1 -> mestre.
- Googletest 1.8.0 -> 1.10.0
- python: uso de
warning
emcp_model.py
(consulte 2530, link em inglês). - python: absl-py 0,11 -> 0,13
CMake
- A versão mínima do aumento é necessária 3.14 -> 3.15 (consulte #2528).
- Python: promoção da versão mínima necessária 3.14 -> 3.18 (consulte #2774).
Fabricante
O build baseado em Make foi descontinuado. Migre para o CMake ou o Bazel para criar usando a origem.
Java
- Melhoria na robustez do carregador de biblioteca nativa (consulte 2742, link em inglês).
- Foi corrigida a falha do Coletor de lixo da JVM ao descartar o modelo de roteamento ou o solucionador de restrições (consulte 2091, link em inglês) (consulte 2466, link em inglês).
- Foi corrigida a falha de callback de geração de registros do CP-SAT ao usar vários workers (consulte 2775, link em inglês).
CP-SAT
- Melhore a robustez do código LNS (consulte #2525).
- Melhoria no código de programação: novos métodos de fábrica para criar intervalos de tamanho fixos, novas heurísticas de pesquisa, solução aprimorada e novos cortes lineares
- Melhoria no código de roteamento: novo LNS dedicado.
- Melhoria no verificador de modelos. Agora ele é mais pedantístico, especialmente sobre possíveis overflows.
- Melhoria do código MIP: melhor resolução e várias melhorias no relaxamento linear dos modelos de MIP e CP.
- Melhorar a diversidade de pesquisa. Ao usar mais de 12 workers, adicione workers dedicados a melhorar o limite inferior do objetivo.
- Mude para o código de paralelismo: por padrão, o solucionador usará todos os núcleos disponíveis. Use
num_search_parameters
para especificar o nível de paralelismo. - O uso de
SearchAllSolutions
eSolveWithSolutionCallback
foi descontinuado. - API Python: verificações mais pedantísticas ao usar
var == ...
ouvar != ...
fora de uma chamadamodel.Add()
.
Abril de 2021
Anúncio do lançamento do OR-Tools v9.0
Lançamos o OR-Tools v9.0. Para atualizar sua versão, consulte a seção apropriada em Instalação de ferramentas OU.
Atualizações de dependência
- Abseil-cpp 20200923.3 atualizado para 20210324.1 LTS.
- Protobuf 3.15.3 atualizado para 3.15.8.
- Java: jna-platform 5.5.0 atualizado para 5.8.0
Java
- OR-Tools agora está disponível no Maven Central (consulte com.google.ortools:ortools-java).
Correções de bugs
- Melhoria no uso de várias linhas de execução ao usar o solucionador CP-SAT (consulte #1588).
- O suporte ao wrapper Python de
std::vector<std::string>
foi corrigido (consulte #2453). - O suporte ao CPLEX foi reformulado (consulte #2470).
Alteração interruptiva conhecida
- Adicione o acesso de logger em Python, Java e .Net (consulte #2245).
- Substituição de todos os tipos personalizados do Google pelos fornecidos em
cstdint
.
CP-SAT
- Os métodos
SearchForAllSolutions()
,SearchAllSolutions()
eSolveWithSolutionCallback()
foram descontinuados. UseSolve()
. - Melhoria no suporte aos operadores padrão do Python. Isso pode corromper códigos incorretos.
Março de 2021
Anúncio do lançamento do OR-Tools v8.2
Lançamos o OR-Tools v8.2. Para atualizar sua versão, consulte a seção apropriada em Instalação de ferramentas OU.
Atualizações de dependência
- Abseil-cpp 20200923.2 atualizado para 20200923.3 LTS.
- Protobuf 3.14.0 atualizado para 3.15.3.
Roteamento
- Os elementos
RoutingModel.RegisterTransitMatrix()
e aRoutingModel.RegisterUnaryTransitVector()
foram adicionados. - Mude o retorno de
RoutingModel.AddVectorDimension()
eRoutingModel.AddMatrixDimension()
parastd::pair<int, bool>
, em queint
é o ID do avaliador do transporte público.
Dezembro de 2020
Anúncio do lançamento do OR-Tools v8.1
Lançamos o OR-Tools v8.1. Para atualizar sua versão, consulte a seção apropriada em Instalação de ferramentas OU.
Atualizações de dependência
- Abseil-cpp 20200923 atualizado para 20200923.2 LTS.
- Protobuf 3.13.0 atualizado para 3.14.
- Adicionar suporte ao Gurobi 9.1.0
- Remover dependência GLog (substituída por uma implementação personalizada dependendo das sinalizações abseil-cpp)
- Remover dependência GFlag (substituída pelo componente de sinalizações abseil-cpp)
Correções de bugs
- A contagem dupla da licença flutuante Gurobi foi corrigida (consulte #2227).
- O build do Windows foi corrigido (consulte #2200).
Outubro de 2020
Anúncio do lançamento do OR-Tools v8.0
Lançamos o OR-Tools v8.0. Para atualizar sua versão, consulte a seção apropriada em Instalação de ferramentas OU.
Mudanças na plataforma
- Foi adicionado suporte ao Python 3.9 (#2187).
- Compatibilidade com Python 3.5 removida (#2186).
<!-- Aguardando suporte para o Microsoft dotnet-sdk. Pode ser gerado após o lançamento...
- Foi adicionado suporte para o Ubuntu 20.10 (#2188) -->
- A compatibilidade com o Ubuntu 16.04 LTS foi removida (#2188).
- Suporte reduzido para o Ubuntu 19.10 (2188, link em inglês)
Atualizações de dependência
- Abseil-cpp 20200225.2 atualizado para 20200923 LTS.
- Protobuf 3.12.2 atualizada para 3.13.0.
Alteração interruptiva conhecida
- Agora, o roteamento e o código-fonte CP-SAT usam alguns recursos
C++17
. Aviso: se você fornecer sua própria versão doabseil-cpp
, verifique se ela foi criada emC++17
. - A assinatura
MPSolver::CreateSolver
foi alterada. O argumento de nome do modelo foi descartado.
CMake
- Correção da desativação do suporte a SCIP ao usar
-DUSE_SCIP=OFF
(consulte 2129, link em inglês). - Integre exemplos e exemplos ao sistema de build do CMake.
Observação: é possível desativar usando
-DBUILD_SAMPLES=OFF
e-DBUILD_EXAMPLES=OFF
. Observação: é possível desativar para um idioma específico usando-DBUILD_<LANG>_SAMPLES=OFF
ou-DBUILD_<LANG>_EXAMPLES=OFF
.- Com
<LANG>
entre: CXX
,PYTHON
,JAVA
eDOTNET
.
- Com
Fabricante
- Requer
Make >= 4.3
(uso da função de avaliação do Make). - Exige
CMake >= 3.14
(uso da opção -- Details do CMake). - Foi adicionada uma opção para desativar o suporte a SCIP usando
-DUSE_SCIP=OFF
(consulte 2134, link em inglês). - Foi adicionada uma opção para desativar o suporte a CLP e CBC usando
-DUSE_COINOR=OFF
.
Java
- Agora, as ferramentas OR geram pacotes do Maven (consulte a seção 202).
Correções de bugs
- O build C++ e Python foi corrigido no FreeBSD (consulte #2126).
- O build na depuração do Windows foi corrigido (consulte 2077, link em inglês).
- Foi corrigida uma falha antiga em paralelo no CP-SAT no Windows (consulte 2001, 2019, links em inglês).
Julho de 2020
Anúncio do lançamento do OR-Tools v7.8
Lançamos o OR-Tools v7.8. Para atualizar sua versão, consulte a seção apropriada em Instalação de ferramentas OU.
Atualizações de dependência
- O Gurobi 9.0.2 agora é pré-integrado em binários pré-criados. Ele pesquisará a biblioteca compartilhada gurobi 90 no caminho de instalação padrão dos instaladores do Gurobi no MAC OS X e no Windows ou no diretório GUROBI_HOME.
- O SCIP 7.0.1 agora está integrado em binários pré-criados. Verifique a conformidade com a licença SCIP antes de usá-la.
- Foi adicionado suporte ao Xpress Solver 8.9.0 opcional.
Solucionador linear
- Foi adicionado um método
LinearSolver::CreateSolver()
estático para simplificar a verificação de suporte a back-ends de solucionadores lineares integrados. Funciona em todos os idiomas.
Correções de bugs
- O build baseado no CMake foi corrigido no FreeBSD.
- A classificação CP-SAT foi corrigida na geração de cortes cumulativos.
- Foi corrigido um vazamento de memória do solucionador linear no wrapper .Net.
Junho de 2020
Anúncio do lançamento do OR-Tools v7.7
Lançamos o OR-Tools v7.7. Para atualizar sua versão, consulte a seção apropriada em Instalação de ferramentas OU.
Atualizações de dependência
- Abseil-cpp b832dce atualizado para c51510d (LTS 20200225.2).
- Protobuf 3.11.4 atualizado para 3.12.2.
Novos recursos e melhorias
- O solucionador CP-SAT agora retorna
Optimal
em vez deFeasible
em um modelo de satisfação (ou seja, sem objetivo). - Adição da heurística da bomba de viabilidade da comunidade MIP.
Correções de bugs
Foi corrigida uma falha de várias linhas de execução do CP-SAT (consulte 2005, link em inglês).
Abril de 2020
Anúncio do lançamento do OR-Tools v7.6
Lançamos o OR-Tools v7.6. Para atualizar sua versão, consulte a seção apropriada em Instalação de ferramentas OU.
Novos recursos do CP-SAT
Adicionamos os seguintes novos recursos ao solucionador CP-SAT:
- Gerenciamento aprimorado de planos de corte para LPs.
- Ferramentas de depuração.
Atualizações de dependência
Abseil-cpp 8ba96a8 foi atualizado para b832dce (LTS 20200225).
Correções de bugs
- Correção do bug de CP-SAT UNSAT em presolve (consulte #1908).
- O URL swigwin.exe foi corrigido.
- O gerenciamento de typemap SWIG foi corrigido para Java e .Net.
Janeiro de 2020
Anúncio do lançamento do OR-Tools v7.5
Lançamos o OR-Tools v7.5. Para atualizar sua versão, consulte a seção apropriada em Instalação de ferramentas OU.
Mudanças na plataforma
- Foi adicionado suporte ao Python 3.8 (#1719).
- A compilação de suporte a partir de fontes foi removida do Visual Studio 2017 (#1852).
- Atualização do suporte do Centos 7 para o Centos 8 (#1827).
Atualização de dependência
Correções de bugs
Os problemas a seguir foram corrigidos nas ferramentas OU v7.5. Para uma lista completa, consulte Marco v7.5.
Especificamente, faça o seguinte:
- Carregamento de assembly fixo. Consulte #1421.
- Os métodos
GetStartIndex()
eGetEndIndex()
do RouteIndexManager foram expostos (#1843). - O SWIG foi corrigido para remover métodos corrompidos (#1838, #1276).
Outubro de 2019
Anúncio do lançamento do OR-Tools v7.4
Lançamos o OR-Tools v7.4. Para atualizar sua versão, consulte a seção apropriada em Instalação de ferramentas OU.
Novos recursos e melhorias
- O solucionador de problemas CP-SAT agora verifica se há restrições que não oferecem suporte a literais de aplicação. O verificador de modelos retornará um erro antes de resolver se essa restrição tiver um literal de aplicação.
- Pesquisa local melhor e mais rápida para a biblioteca de trajetos.
- O solucionador linear agora oferece suporte ao software de terceiros Xpress-MP. Você precisará recriar as ferramentas OR a partir da origem para usá-las.
- A arquitetura do pacote NuGet foi completamente reescrita. Mais especificamente, agora ela é compatível com o .NET Framework >= 4.5.2 em plataformas Windows.
Plataforma descontinuada
Conforme anunciado nas notas da versão de julho de 2019, o OR-Tools não é mais compatível com o Python 2.7.
Atualização de dependência
O Protobuf 3.9.0 foi atualizado para 3.10.0.
Agosto de 2019
Anúncio do lançamento do OR-Tools v7.3
Lançamos o OR-Tools v7.3. Para atualizar sua versão, consulte a seção apropriada em Instalação de ferramentas OU.
Plataforma descontinuada
Estamos descontinuando o suporte ao Python 2.7 para nos alinharmos à migração do Google para o Python 3. Esta será a última versão das ferramentas OR compatíveis com Python 2.7.
Atualização de dependência
O Protobuf 3.8.0 foi atualizado para 3.9.0.
Correções de bugs
Os problemas a seguir foram corrigidos na ferramenta OR v7.3. Para uma lista completa, consulte Kanban v7.3.
Especificamente, faça o seguinte:
- Correção do problema de transmissão init/int64 no Java (#1448).
- Correção da verificação de presolve ao processar restrições cumulativas vazias.
Julho de 2019
Anúncio do lançamento do OR-Tools v7.2
Lançamos o OR-Tools v7.2. Para atualizar sua versão, consulte a seção apropriada em Instalação de ferramentas OU.
Mudanças na plataforma
- Estamos descontinuando o suporte ao Python 2.7 para nos alinharmos à migração do Google para o Python 3. Haverá no máximo mais uma versão do OR-Tools com suporte ao Python 2.7.
- Ubuntu 18.10 atualizado para o Ubuntu 19.04.
- Foi adicionado suporte à compilação de fontes no Visual Studio 2019.
- O Python 3.5 não é mais compatível com o Windows. Use o Python 3.6 ou superior.
Atualizações para dependências
- Agora, segmentamos CBC 2.10.3.
- Agora, direcionamos o Protobuf 3.8.0.
CP-SAT
- Fizemos várias melhorias na pesquisa, no paralelismo e no relaxamento linear.
- Adição das APIs
LinearExpr.Sum()
eLinearExpr.ScalProd()
no Python - As APIs
IntVar[].Sum()
eIntVar[].ScalProd()
foram descontinuadas no C#. - C++: o método
SolveWithModel()
foi removido porque era uma cópia deSolveCpModel()
. - Os métodos
CpModel.addGreaterThan()
eCpModel.addLessThan()
foram adicionados à API Java.
Solucionador linear
- Adição de
MPSolver.SetHint()
para Python, Java e C# (compatível com SCIP e Gurobi). MPSolver.SetNumThreads()
foi adicionado para Python, Java e C# (compatível com CBC, Gurobi e SCIP).- O suporte para SCIP 6.0.1 foi reescrito.
Documentação de referência
- Adicionamos manuais de referência baseados em doxygen e pdoc3 para todas as linguagens e ferramentas (algoritmos, roteamento, gráfico, linear_solver e CP-SAT). Consulte Manuais de referência das Ferramentas OR.
- A documentação de referência está completa para C++ (todos os produtos) e CP-SAT (C++, Python, Java).
- Estamos exportando toda a documentação do C++ para Python e Java.
- Não há documentação do .NET, e não temos uma solução para melhorar isso no futuro. Mantemos o arquivo porque ele ainda mostra a API disponível.
Maio de 2019
Anúncio do lançamento do OR-Tools v7.1
Lançamos o OR-Tools v7.1. Para atualizar sua versão, consulte a seção apropriada em Instalação de ferramentas OU.
Mudanças nas dependências necessárias
O OR-Tools v7.1 tem as seguintes dependências novas e atualizadas:
- glog v0.3.5 atualizado para v0.4.0
- protobuf v3.6.1 atualizado para v3.7.1
- Cbc 2.9.9 atualizado para 2.10.1
- Cgl 0.59.10 atualizado para 0.60.1
- Clp 1.16.11 atualizado para 1.77.1
- Osi 0.107.9 atualizado para 0.108.1
- CoinUtils 2.10.14 atualizado para 2.11.1.
Mudanças na API CP-SAT
As seções a seguir descrevem as mudanças na API CP-SAT no OR-Tools 7.1.
- Como usar o domínio para criar variáveis.
- Usar o domínio em expressão linear.
- Como usar auxiliares de expressão linear.
Como usar o domínio para criar variáveis
Os exemplos a seguir mostram como criar uma variável de número inteiro com domínios não contíguos.
Isso substitui o método NewEnumeratedIntVar()
removido.
Aqui, a variável x pode ser 1, 3, 4 ou 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");
As variáveis também podem ser criadas usando uma lista de intervalos. Abaixo, a variável x é restrita a 1, 2, 4, 5 ou 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");
Como usar o domínio em uma expressão linear
Os exemplos a seguir mostram como limitar uma expressão linear em um domínio não contíguo. Aqui, a expressão linear linear_expr é definida em 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} }));
Como usar auxiliares de expressão linear
Os exemplos a seguir mostram como usar métodos auxiliares para criar somas e produtos escalares.
Confira um exemplo em que queremos usar 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);
Março de 2019
Anúncio do lançamento do OR-Tools v7.0
Lançamos o OR-Tools v7.0. Para atualizar sua versão, consulte a seção apropriada em Instalação de ferramentas OU.
Mudanças nas plataformas com suporte
O OR-Tools v7.0 não é mais compatível com as seguintes plataformas:
- Visual C++ 2015
- Ubuntu 14.04
- Python 3.4 no Linux
Se você estiver usando uma dessas plataformas, ainda poderá instalar o OR-Tools v6.10.
Mudanças nas dependências necessárias
O OR-Tools v7.0 tem as seguintes dependências novas e atualizadas:
- Novo: Abseil-cpp
- gflags 2.2.1 atualizado para 2.2.2
As seções a seguir descrevem os novos recursos e melhorias do OR-Tools 7.0.
- Novo gerenciador de índices para programas de roteamento
- Suporte a VRPs com retiradas e entregas
- Suporte a funções lambda em Java e C#
Novo gerenciador de índices para programas de roteamento
Nas Ferramentas do OR v7.0, os programas de roteamento de veículos precisam usar o novo RoutingIndexManager
.
Isso garante que os índices padrão para locais sejam consistentes com os
índices internos usados pelo solucionador e ajuda a evitar erros no código.
O novo RoutingIndexManager
requer algumas pequenas mudanças nos programas de roteamento,
que são descritas nas seções a seguir:
- Inclua ou importe
RoutingIndexManager
em C++ e Java. - Declarar
RoutingIndexManager
- Adicione o
RoutingIndexManager
aos callbacks de dimensões. - Use a
RoutingIndexManager
para imprimir soluções.
Incluir/importar RoutingIndexManager
No OR-Tools 7.0, os programas de roteamento em C++ e Java precisam incluir ou importar o
RoutingIndexManager
, conforme mostrado nos exemplos abaixo:
C++
#include "ortools/constraint_solver/routing_index_manager.h"
Java
import com.google.ortools.constraintsolver.RoutingIndexManager;
As importações para Python e C# não são alteradas.
Declarar RoutingIndexManager
Nas ferramentas OR v7.0, os programas de roteamento precisam declarar RoutingIndexManager
e criar o modelo de roteamento, conforme mostrado nos exemplos a seguir:
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);
Os argumentos de RoutingIndexManager
são:
- O número de locais
- O número de veículos
- O índice do depósito (locais de partida e chegada para todos os veículos)
Callbacks
No OR-Tools v7.0, você precisa usar RoutingIndexManager
para criar callbacks,
como o callback de distância, que você transmite para o solucionador.
Os exemplos abaixo mostram como criar um callback de distância.
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);
O método IndexToNode
converte os índices de localização internos usados pelo
solucionador nos índices padrão da matriz de distância.
Em vez de transmitir o callback diretamente para o solucionador, como nas versões anteriores,
na v7.0, primeiro você cria transit callback index
, uma referência ao
callback, e a transmite para o solucionador (neste caso, por SetArcCostEvaluatorOfAllVehicles
).
Dimensões
Nos exemplos a seguir, mostramos como criar uma dimensão para demandas e capacidades, que é usada para resolver o problema de roteamento de veículos capacitados.
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");
Soluções de impressão
No OR-Tools v7.0, use RoutingIndexManager
para mostrar as rotas do veículo em uma solução. Os exemplos a seguir mostram como imprimir soluções em todas as linguagens compatíveis.
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); }
Suporte a VRPs com retiradas e entregas
A OR-Tools v7.0 oferece suporte para resolver problemas de roteamento de veículos (VRPs, na sigla em inglês) com
retiradas e entregas, em que o objetivo é encontrar os trajetos mais curtos para uma
frota de veículos retirando e entregando itens em vários locais. Você configura
o problema de maneira semelhante a um VRP padrão, mas, além disso, especifica um par
(i, j)
de locais para cada item, em que i é o local de retirada e j é o
local de desembarque. O solucionador de trajetos retorna trajetos do veículo que, para cada par, (i, j)
, i
e j
estejam no mesmo trajeto, e o veículo visita i
antes de j
.
Para conferir um exemplo que resolve esse tipo de problema, consulte Roteamento de veículos com embarques e entregas.
Suporte a funções lambda
O OR-Tools v7.0 agora inclui suporte para funções lambda em C# e Java, além de C++ e Python, que já tinham suporte. As funções Lambda fornecem uma maneira conveniente de definir callbacks em programas de roteamento. No entanto, você pode definir callbacks usando funções padrão se achar que isso torna seu código mais legível.
Os exemplos de callback em C# e Java acima ilustram como definir callbacks usando funções lambda.
Novembro de 2018
Anúncio do lançamento da versão v6.10
Lançamos a versão 6.10 do OR-Tools. Para atualizar sua versão, consulte a seção apropriada de Instalação de ferramentas OU.
As seções a seguir descrevem os novos recursos e melhorias da versão 6.10.
Comandos simplificados para criar e executar programas.
Na versão 6.10, é possível criar e executar programas inserindo comandos como estes:
make run SOURCE=relative/path/to/program.cc, em que
<var>relative/path/to</var>
é o caminho para o diretório que contém o
programa.
Para criar um programa sem executá-lo, digite:
make build SOURCE=relative/path/to/program.cc. Consulte Começar a usar ferramentas OR para conferir instruções específicas sobre como executar programas por linguagem.
Suporte para SCIP 6.0.0
O OR-Tools é compatível com o SCIP 6.0.0.
Binários
As distribuições binárias foram criadas usando Java JDK 8 (JDK 7 para Ubuntu 14.04).
Solucionador CP-SAT
Atualizar a API
- Foi adicionada a API CpModelBuilder para C++ CP-SAT.
Exemplos
Alguns exemplos foram movidos.
- Mover exemplos da comunidade para
examples/contrib
. - Mova alguns exemplos para
ortools/<var>component</var>/samples
(por exemplo,ortools/linear_solver/samples/simple_program.java
)
Setembro de 2018
Anúncio do lançamento da versão v6.9
Lançamos a versão 6.9 do OR-Tools. Para atualizar sua versão, consulte a seção apropriada de Instalação de ferramentas OU.
Dependências atualizadas
- Protobuf 3.5.1 -> 3.6.1.
- SCIP 4.0 a 6.0
Solucionador CP-SAT
- Mudanças interruptivas na API. Todos os detalhes neste link:
- Renomeie
SolveWithSolutionObserver
comoSolveWithSolutionCallback
em Python. Renomeie
NewSolution
comoOnSolutionCallback
na classeCpSolverSolutionCallback
em Python. O exemplo a seguir mostra a nova maneira de criar um callback de solução em 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
Exposição de
StopSearch
no callback da solução em Python, Java e C#. Acesse a documentação aqui.ModelStats
eCpSolverResponseStats
foram expostos em Python, Java e C#.Melhoria na documentação do docstring do Python. Acesse a documentação aqui.
Atualizações na implementação Java da interface do solucionador e do manual.
Implemente módulo.
Mude a implementação de reservoir: adicione a API com booleano para especificar eventos opcionais de drenagem/preenchimento
Solucionador linear
- Exposição de
InterruptSolve
em Java e C#.
Solucionador
- Exposição do diretor
SolutionCollector
em C#.
Python
- Foi adicionado suporte a
Python 3.7
. - Ao compilar usando a origem: dê preferência a
python3
em vez depython2
ao detectar o Python.
.NET
- Reescrever completamente a camada .NET.
- Forneça um pacote Nuget
Google.OrTools
NetStandard 2.0 compatível com o IDentificador de ambiente de execuçãowin-x64
,linux-x64
eosx-x64
. - Forneça um pacote Nuget
Google.OrTools.FSharp
. - Adicione um arquivo de projeto para todos os exemplos em .NET.
- Atualize todos os exemplos de script F# (.fsx) para o projeto F# normal (.fs).
- Adicione a documentação sobre a geração de build de pacotes .NET aqui.
Zinco
- Foi adicionado suporte a conjuntos em flatzinc (usando nosets.mzn).
Contribuições
- Foi adicionado suporte à vinculação. Agradecemos a Kevin Mader
- Transforme
DecisionVisitor
em um tipo de diretor nas vinculações Java. Agradecemos a Jeremy Apthorp.
Julho de 2018
Anúncio do lançamento da versão v6.8
Lançamos a versão 6.8 do OR-Tools. Para atualizar sua versão, consulte a seção apropriada de Instalação de ferramentas OU.
Conheça o solucionador CP-SAT
O solucionador CP-SAT é um novo solucionador para programação de restrições. O solucionador CP-SAT é mais rápido do que o solucionador CP e deve ser preferível para problemas de CP.
Para ver exemplos que usam o solucionador CP-SAT, procure no diretório examples no GitHub para arquivos que tenham _sat
no nome.
O solucionador CP original vai continuar sendo mantido por um período para oferecer suporte ao código atual, mas foi descontinuado.
Novas opções para o solucionador CP-SAT
As seguintes opções para o solucionador CP-SAT são novas nesta versão:
- Pesquisa de bairro local (LNS, na sigla em inglês): use a opção
SatParameters.use_lns
para ativar o LNS. - Pesquisa paralela: use a opção
SatParameters.num_search_workers
para ativar várias linhas de execução durante uma pesquisa. Cada linha de execução pode ter parâmetros diferentes e diferentes sementes aleatórias. Isso maximiza a diversidade e a probabilidade de que pelo menos uma linha de execução encontre soluções.
Melhorias de desempenho para solucionadores de problemas
Fizemos melhorias de desempenho nos solucionadores CP-SAT e Glop.
Março de 2018
Anúncio do lançamento da versão v6.7
Lançamos a versão 6.7 do OR-Tools. Para atualizar sua versão, consulte a seção apropriada em Instalação de ferramentas OU.
Atualizar para as dependências necessárias
- Protobuf 3.5.0 -> 3.5.1.
Diversos
- Refatorar a base para preparar a integração abseil-cpp.
- Uso dos serviços de integração contínua (CI) do Travis CI e do Appveyor.
SÁB
- Melhoria no desempenho.
- Melhora a API Python.
- Adição da API C#, também conhecida como CpSolver.cs (EXPERIMENTAL).
Glop
- Refatoração de código
- Melhoria no desempenho.
Suporte ao CMake (EXPERIMENTAL)
- Foi adicionado suporte ao CMake C++ OR-Tools.
- Saber compilar OR-Tools como um projeto CMake independente.
- Conseguir incorporar ferramentas OR a um projeto CMake existente.
- Adicione o build baseado em CMake das ferramentas OR Python.
- Gerar o pacote Python (wheel) usando o CMake.
Contribuições
- Correção da redefinição winsock2.h no Windows. Agradecemos a Florent Tollin de Rivarol.
- Adicione suporte a F# (EXPERIMENTAL). Agradecemos a Matthew Moore. Observação: disponível apenas com o builder do Makefile.
- Adicionar suporte padrão ao .NET (EXPERIMENTAL). Agradecemos a Ziad El Malki. Observação: disponível apenas com o builder do Makefile.
Novembro de 2017
Anúncio do lançamento da versão v6.6
Lançamos a versão 6.6 do OR-Tools. Para atualizar sua versão, consulte a seção apropriada de Instalação de ferramentas OU.
Atualizações para as dependências necessárias
- Protobuf para 3.3.0 -> 3.5.0.
- do gflags para 2.2.0 -> 2.2.1.
- CBC 2.9.8 -> 2.9.9.
- Adicione o módulo seis (1.10) do Python como a dependência necessária para o Python.
Correções de bugs
- Solicitação de envio no 494 Refatoração de nome. Adição de comentários para o IntelliSense em alguns editores Agradecemos a Matthew Moore.
- Solicitação de envio no 516 Instrução para binário autônomo F#. Agradecemos a Matthew Moore.
- Melhorar a precisão no Glop.
Solucionador SAT
- Melhoria no solucionador interno do SAT, correção de vários bugs.
- Adiciona uma restrição de VRP ao solucionador SAT, vinculado ao solucionador LP.
- Mude o observador de solução no solucionador SAT para usar um
CpSolverResponse
como parâmetro. - Melhorar o uso de Glop no Solucionador SAT.
- Aceleração da conexão SAT-LP.
- A restrição de reservatório foi adicionada ao formato protobuf cp_model do SAT.
SAT/Python
- Introdução da API SAT em Python.
- Código em
ortools/sat/python/cp_model.py
. - Adicione exemplos em 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
- Inclusão de compatibilidade com o notebook IPython (em inglês).
- Os exemplos do Python são exportados para notebooks e disponibilizados em examples/notebook.
Exemplos
- Reescreva rcpsp_parser para usar o formato ProtoBuf e armazenar o problema.
- Melhoria no analisador RCPSP.
Outubro de 2017
Anúncio do lançamento da versão v6.5
Lançamos a versão 6.5 do OR-Tools. Para atualizar sua versão, consulte a seção apropriada de Instalação de ferramentas OU.
Mudança nas plataformas
- O módulo pypi py3-ortools foi mesclado com o módulo ortools. Agora há apenas um módulo: "ortools".
- O formato principal desses módulos Python agora são arquivos wheel.
Para instalar OR-Tools para Python usando pypi, basta executar
pip install ortools
. Você precisa de uma versão recente do pip instalada (>= 9.0.1). Isso extrairá a versão mais recente (v6.5).
Bug fixed
O arquivo jar protobuf agora é criado corretamente com classes compiladas.
Novos exemplos
- Mais exemplos de F# foram contribuídos para o diretório examples/fsharp (graças novamente a Matthew Moore).
- Exemplos de MIP do Java também foram disponibilizados (obrigado Darian).
Setembro de 2017
Anúncio do lançamento da versão v6.4
Lançamos a versão 6.4 do OR-Tools. Para atualizar sua versão, consulte a seção apropriada de Instalação de ferramentas OU.
Mudança nas plataformas
- Agora, os módulos Pypi nas plataformas Linux são entregues como arquivos wheel usando a tag Manylinux1. Agradecemos a Federico Fácerelli. Com essa mudança, revertemos os módulos por Linux introduzidos na versão de julho de 2017.
Novos recursos
- Método de escalonamento aprimorado usado dentro do GLOP.
- Correção do encapsulamento de avaliadores na biblioteca de roteamento C#. Agradecemos a DevNamedZed.
- Melhorar o desempenho do plano de zinco para modelos grandes.
- Use o SAT com suporte para flatzinc por padrão.
- Melhorar o desempenho da abordagem baseada em Core para o solucionador SAT.
- Correção do bug no algoritmo de atribuição linear que estava falhando incorretamente.
- Adição de exemplos de F# em ortools/examples/fsharp.
- Remova a verificação de penalidades positivas na biblioteca de roteamento.
Agosto de 2017
Anúncio do lançamento da versão v6.3
Lançamos a versão 6.3 do OR-Tools. Para atualizar sua versão, consulte a seção apropriada de Instalação de ferramentas OU.
Novos arquivos de download
Os arquivos Python wheel para Linux agora estão disponíveis para download na página de versões OR-Tools, junto com as versões mais recentes de todos os downloads.
Solucionador minizinco
Esta versão contém o código final de satélite e de flatzinc enviado para o desafio Minizinc 2017.
Julho de 2017
Anúncio do lançamento da versão v6.2
Lançamos a versão 6.2 do OR-Tools. Para atualizar sua versão, consulte a seção apropriada de Instalação de ferramentas OU.
Mudança nas plataformas
- Agora oferecemos suporte a várias distribuições binárias do Linux (Ubuntu 14.04, 16.04, 17.04, CentOS 7, Debian 9).
- Agora, os módulos Pypi nas plataformas Linux incluem uma tag que descreve a distribuição (ubuntu-14.04, ubuntu-16.04, ubuntu-17.04, centos-7, debian-9).
Novos recursos
Adicionamos suporte ao Docker para criar artefatos do Linux. Acesse
or-tools/tools/docker
e confira o Makefile
para conferir possíveis destinos
(make archive
, make pypi
e make pypi3
).
Esses comandos vão criar um subdiretório export
e adicionar artefatos binários a ele.
Junho de 2017
Anúncio do lançamento da versão v6.1
Lançamos a versão 6.1 do OR-Tools. Para atualizar sua versão, consulte a seção apropriada de Instalação de ferramentas OU.
Mudança nas plataformas
- O Visual Studio 2017 é compatível, mas o Visual Studio 2013 não é mais compatível.
- As versões 10.9 e mais recentes do macOS são compatíveis.
Novos recursos
Adicionamos um novo formato protobuf para nosso solucionador CP-SAT.
Consulte ortools/sat/cp_model.proto
para definir o modelo e
ortools/sat/cp_model_solver.h
para resolver o problema.
Correções de bugs
Problema 420: corrigimos o atributo __version__
ausente nos módulos pypi
do Python em todas as plataformas.
Maio de 2017
Anúncio do lançamento da versão v6.0
Lançamos a versão 6.0 do OR-Tools. Para atualizar sua versão, consulte a seção apropriada de Instalação de ferramentas OU.
Nova estrutura de diretórios em C++
Mudamos a estrutura de origem/inclusão das ferramentas OR ao usar C++. O objetivo é melhorar o encapsulamento dos arquivos de inclusão do C++. Ele também tem a vantagem de alinhar as estruturas de diretórios C++ e Python.
src/
foi renomeado comoortools/
.- Todos os comandos #include em arquivos C++ agora têm o prefixo
ortools
adicionado.#include "constraint/constraint_solver.h"
agora é#include "ortools/constraint/constraint_solver.h"
.
Novos recursos
- Suporte ao Bazel.
Agora é possível criar ferramentas OR com o bazel, a ferramenta de compilação do Google. Ele funciona no Linux e no Mac OS X. Depois de fazer o download do Bazel versão 0.4.5 ou
mais recente, mude o diretório para or-tools e crie os exemplos:
bazel build examples/cpp/...
.
Roteamento
Implementamos suporte a intervalos (por exemplo, tempo de inatividade do veículo devido a motoristas almoçando) na biblioteca de trajetos. Esse recurso é mostrado no
exemplo
cvrptw_with_breaks.cc
.
Suporte ao SCIP
O wrapper de solucionador linear agora é compatível com SCIP 4.0. Agora você precisa criar o SCIP primeiro e depois dizer às ferramentas que ele será usado. As instruções estão disponíveis aqui.
Suporte a GLPK
Também mudamos o caminho com o build com GLPK. Acesse este link.
Limpeza
- Removemos todo o uso de hash_map e hash_set na base de código C++, já que eles foram descontinuados Eles foram substituídos por unordered_map e unordered_set do STL.
- Limpeza dos makefiles de C#, cortesia de Michael Powell.
Janeiro de 2017
Anúncio do lançamento da versão v5.1
Lançamos a versão 5.1 do OR-Tools. Para atualizar sua versão, consulte a seção apropriada de Instalação de ferramentas OU.
Novos recursos
Instalação
- Introdução de procedimentos mais simples para instalar ferramentas OR, seja a partir de distribuições binárias ou do código-fonte. Para mais informações, consulte Como instalar ferramentas OR a partir de binários ou Como instalar ferramentas OR a partir da origem.
Roteamento
Foi implementado um algoritmo para calcular o limite inferior Held-Karp para problemas simétricos de vendedores em viagem. Isso permite calcular um limite superior para a lacuna entre o custo de uma solução potencialmente não ideal e o custo da solução ideal.
- Foi adicionado um novo método à biblioteca de trajetos de veículos,
RoutingModel::SetBreakIntervalsOfVehicle
, que permite adicionar intervalos de break, que são períodos em que o veículo não pode realizar nenhuma tarefa, como viajar ou visitar um nó. Para ver um exemplo que usa essa opção, consulte cvrptw_with_breaks.cc
Agendamento
- Foi adicionado suporte a mais formatos de dados no analisador para a Biblioteca Project Scheduling.
Solucionador de sat
- A restrição cumulativa do solucionador SAT agora aceita intervalos opcionais, criados
com o método
NewOptionalInterval
. Para ver um exemplo, consulte https://github.com/google/or-tools/blob/master/examples/cpp/rcpsp_sat.cc. - Agora é possível resolver um problema "Max-SAT" (satisfiability_ máxima) especificando o objetivo como uma soma ponderada de literais. Não é mais necessário criar uma variável de número inteiro intermediária.
Melhorias no desempenho
- Solucionador de SAT: melhoria no desempenho do solucionador, especialmente para a restrição cumulativa.
- Solucionador de Glop: robustez numérica aprimorada do solucionador, que agora retorna soluções ainda mais precisas para problemas numéricos difíceis.
- Solucionador Flatzinc
- Melhoria significativa no desempenho do back-end Sat para o intérprete de flatzinc.
- Simplificação da interface flatzinc de C#. Para ver um exemplo da nova interface, consulte https://github.com/google/or-tools/blob/master/examples/csharp/csfz.cs.
Correções de bugs
- O uso da
heurística
PathCheapestArc
em modelos de roteamento com um único veículo e restrições laterais às vezes fazia com que o solucionador fosse executado por muito tempo. Isso foi corrigido considerando corretamente as restrições laterais. - Em Java, o solucionador de problemas de roteamento às vezes travava ao resolver problemas de definição de trajeto de veículos. Isso foi corrigido na última versão.
Novembro de 2016
Anúncio do lançamento da versão v5.0
Lançamos a versão 5.0 do OR-Tools. Para atualizar sua versão, consulte a seção apropriada de Instalação de ferramentas OU.
Exemplos em execução
- Foram introduzidos destinos específicos de linguagem que facilitam a compilação e execução dos seus programas, bem como os exemplos que acompanham as ferramentas OR.
Sáb
- Foi adicionado suporte à programação de restrições.
- Foram implementadas as restrições diffn, cumulativa , circuito e subcircuito.
- Implementação do verificador de sobrecarga com base no algoritmo de filtragem de energia máxima para restrição cumulativa discreta.
- Foi implementado o propagador consistente com limites diferentes, que implementa uma propagação melhor para a restrição AllDifferent
FlatZinc
- Foi implementado um solucionador SAT para problemas do FlatZinc.
Solucionador de restrições
- As seguintes restrições foram implementadas :
- atMost: define um limite superior para a contagem de variáveis iguais a um determinado valor.
- MakePathPrecedenceConstraint e MakePathTransitPrecedenceConstraint: implemente a restrição de precedência para um conjunto de pares.
Roteamento
- Foi implementado o AddAtSolutionCallback, que é um callback chamado sempre que uma solução é encontrada durante a pesquisa.
- Os construtores sem depósito do RoutingModel foram removidos Agora é obrigatório especificar pelo menos um depósito no modelo de roteamento.
Setembro de 2016
Anúncio do lançamento da versão v4.4
Lançamos a versão 4.4 do OR-Tools. Para atualizar sua versão, consulte a seção apropriada de Instalação de ferramentas OU.
Sáb
- API de agendamento estendida e exemplos modificados (weighted_tardiness_sat e jobshop_sat) para usá-la.
Gráfico
- Características do iterador foram adicionadas às classes Graph
Distribuição de ferramentas OU
- O pacote Nuget é compatível novamente.
Agosto de 2016
Anúncio do lançamento da versão v4.3
Lançamos a versão 4.3 do OR-Tools. Para atualizar sua versão, consulte a seção apropriada de Instalação de ferramentas OU.
Solucionador de restrições
- O método
NotBetween
foi implementado para restringir uma variável a um determinado intervalo.
roteamento
- Foi adicionada uma análise do modelo para verificar as restrições de
NotMember
existentes, conforme mostrado neste exemplo, e usá-las em filtros de pesquisa local. - A criação de perfil da pesquisa local foi adicionada.
- Correção para mudanças locais.
Solucionador linear
- Relatórios de status do SCIP corrigidos.
Sáb
- O método SolveWithPresolve foi implementado para simplificar o uso do presolver de SAT.
- Utilitários de pesquisa reagrupados em src/sat/util.h|cc.
- Implementação de restrições de programação da SMT (geração lenta de cláusulas): consulte jobshop_sat.cc e weighted_tardiness_sat.cc.
Glop
- O desempenho melhorou explorando a esparsidade em mais estágios de computação.
Zinco
- Correção de bugs encontrados pelo desafio minizinc.
Lp_data
- Simplificação contínua de modelos em iteradores.
Distribuição de ferramentas OU
- Os assemblies C# agora são nomeados fortemente por padrão.
- Atualização para Protobuf3.0.0.
- Foi adicionado um script do Python para verificar as dependências de arquivo das ferramentas OR.
Julho de 2016
Anúncio do lançamento da versão v4.2
Lançamos a versão 4.2 do OR-Tools. Para atualizar sua versão, consulte a seção apropriada de Instalação de ferramentas OU.
Solucionador de restrições (roteamento)
- Agora, uma disjunção pode ser definida com uma cardinalidade, que é o número máximo de nós que podem estar ativos dentro dessa disjunção. Por exemplo, se você adicionar uma disjunção com n nós e uma cardinalidade de k, os k nós entre os n nós poderão ficar ativos. Você pode usar a nova definição de AddDisjunction para fazer isso.
- Inclusão de suporte a várias disjunções por nó. Por exemplo, agora você pode adicionar um nó, N1, a muitas disjunções (D1..Dm). Isso aumenta sua chance de ser ativa em qualquer um deles. Introduzido um algoritmo de pesquisa de roteamento mais rápido para problemas relacionados a janelas de tempo disjuntas.
- Foram adicionados parâmetros do solucionador de restrições aos parâmetros de modelo de roteamento e log_search aos parâmetros de pesquisa de roteamento.
- O algoritmo de pesquisa local é mais rápido na resolução de problemas com janelas de tempo separadas. Confira o exemplo em cvrp_disjoint_tw.cc para mais detalhes.
Glop (otimização linear)
- Introduzido um algoritmo Simplex mais rápido.
Distribuição de ferramentas OU
- Um arquivo por plataforma, em vez de arquivos individuais para cada um dos arquivos C++, Java e .Net. Os arquivos Python continuam hospedados em pypi.
- Em pypi, mudamos para módulos wheel (.whl) no Mac OS X e Windows. Foi introduzido um esquema de numeração MAJOR.MINOR. Esses números são usados para os nomes de arquivos, a versão armazenada nas bibliotecas compartilhadas do Mac OS X, nos módulos do Python e em conjuntos do .NET. A primeira versão que estamos lançando é a v4.2, com esse esquema
Junho de 2016
Anúncio do lançamento da versão v2016-06
Lançamos a versão v2016-06 do OR-Tools. Para atualizar sua versão, consulte a seção apropriada de Instalação de ferramentas OU.
Solucionador de restrições
- A maioria das instâncias dos callbacks (src/base/callback.h) foram removidas da biblioteca CP.
- NotMemberCt adicionado. A variável não pode pertencer a um conjunto de intervalos.
Biblioteca de roteamento
- ALTERAÇÃO INCOMPATÍVEL: para especificar a capacidade de veículos em
AddDimensionWithVehicleCapacity
, agora você precisa transmitir uma matriz (um vetor em c++) em vez de um callback.
GLOP
- Mudar a representação interna da matriz esparsa.
- Melhorias de desempenho.
Gráfico
- Os algoritmos de Dijkstra e Bellman-Ford foram reescritos para substituir callbacks por
std::function
(C++). - Mude a API de implementação de gráfico diferente ao iterar em arcos e nós.
Sáb
- Remoção do método principal não utilizado (nós de resolução).
- O redator foi adicionado para verificar as provas de insatisfação.
- Adicionar pré-processador.
Bop
- Adicionar novos bairros.
Exemplos
- c++: se livrar de filelinereader em exemplos.
- dados: adicionar problemas de programação em uma única máquina.
Documentação
- Consulte a nova documentação.
Abril de 2016
Anúncio do lançamento da versão v2016-04
Lançamos a versão OR-Tools v2016-04. Para atualizar sua versão, consulte a seção apropriada de Instalação de ferramentas OU.
Dependências atualizadas
- Use protobufs em vez de flags nas bibliotecas de roteamento e programação de restrições. Consulte http://or-tools.blogspot.fr/2016/02/heads-up-upcoming-incompatibility-in.html (link em inglês) para mais detalhes.
Dezembro de 2015
Anúncio do lançamento da versão v2015-12
Lançamos a versão OR-Tools v2015-12. Para atualizar sua versão, consulte a seção apropriada de Instalação de ferramentas OU.
Solucionador de restrições
- A compatibilidade com a Pesquisa de bairros grandes no solucionador CP foi interrompida. Consulte
examples/cpp/ls_api.cc
,examples/python/pyls_api.py
,examples/csharp/csls_api.cs
eexamples/com/google/ortools/sample/LsApi.java
para conferir a nova API. - Limpeza do encapsulamento do Python. Suporte à decisão personalizada no solucionador de problemas de CPU.
Consulte
examples/test/test_cp_api.py
para conferir a API em ação. - Diversas melhorias e correções de bugs.
Setembro de 2015
Anúncio da primeira versão no GitHub.
Os arquivos serão armazenados lá a partir de agora.
Zinco
- Foram adicionados arquivos binários para o intérprete flatzinc (consulte www.minizinc.org).
- Contém algumas correções para a versão usada no desafio.