diff --git a/Dependencies.txt b/Dependencies.txt index 904a5e4acc..fd84dc533c 100644 --- a/Dependencies.txt +++ b/Dependencies.txt @@ -1,4 +1,4 @@ -Protobuf = 3.5.0 +Protobuf = 3.5.1 gflags = 2.2.1 glog = 0.3.5 Cbc = 2.9.9 diff --git a/examples/fsharp/lib/Google.OrTools.FSharp.fsx b/examples/fsharp/lib/Google.OrTools.FSharp.fsx index 845823cc97..d8fa7bf415 100644 --- a/examples/fsharp/lib/Google.OrTools.FSharp.fsx +++ b/examples/fsharp/lib/Google.OrTools.FSharp.fsx @@ -79,40 +79,37 @@ type LinearSolverAlgorithm = | IP of IntegerProgramming /// Max Flow Solver Result -module MaximumFlow = - let (|Optimal|IntOverflow|BadInput|BadResult|) status = - match status with - | 0 -> - Optimal - | 1 -> - IntOverflow - | 2 -> - BadInput - | 3 -> - BadResult - | unknownResult -> - failwithf "Unknown result %i" unknownResult +type MaximumFlowResult = + | Optimal + | IntegerOverflow + | BadInput + | BadResult + member this.Id = + match this with + | Optimal -> 0 + | IntegerOverflow -> 1 + | BadInput -> 2 + | BadResult -> 3 /// Minimum Cost Flow Result -module MinimumCostFlow = - let (|NotSolved|Optimal|Feasible|Infeasible|Unbalanced|BadResult|BadCostRange|) status = - match status with - | 0 -> - NotSolved - | 1 -> - Optimal - | 2 -> - Feasible - | 3 -> - Infeasible - | 4 -> - Unbalanced - | 5 -> - BadResult - | 6 -> - BadCostRange - | unknownResult -> - failwithf "Unknown result %i" unknownResult +type MinimumCostFlowResult = + | NotSolved + | Optimal + | Feasible + | Infeasible + | Unbalanced + | BadResult + | BadCostRange + member this.Id = + match this with + | NotSolved -> 0 + | Optimal -> 1 + | Feasible -> 2 + | Infeasible -> 3 + | Unbalanced -> 4 + | BadResult -> 5 + | BadCostRange -> 6 + /// Knapsack Solver Algorithm type KnapsackSolverAlgorithm = diff --git a/examples/fsharp/network-max-flow-lpSolve.fsx b/examples/fsharp/network-max-flow-lpSolve.fsx new file mode 100644 index 0000000000..c7be48e8cc --- /dev/null +++ b/examples/fsharp/network-max-flow-lpSolve.fsx @@ -0,0 +1,41 @@ +(* + The matrix in the problem represent the arcs versus the number of nodes + (not including the source and sink nodes). In this problem we have 6 nodes + and nine arcs. For maximal flow, we want to maximize the flow in the arcs + connected to the source (in this case node 6). The answer represent the arcs + flows. + + The objective function vector identify the arcs we want to maximize and the lower + and upper bounds are the arc capacities. + + Answer: + Objective: 12.000000 + var[0] : 1.000000 + var[1] : 4.000000 + var[2] : 5.000000 + var[3] : 2.000000 + var[4] : 4.000000 + var[5] : 0.000000 + var[6] : 6.000000 + var[7] : 6.000000 + var[8] : 1.000000 + +*) + +#I "./lib" +#load "Google.OrTools.FSharp.fsx" + +open Google.OrTools.FSharp + +let opts = SolverOpts.Default + .Name("Max Flow with Linear Programming") + .Goal(Maximize) + .Objective([0.; 0.; 0.; 0.; 0.; 0.; 1.; 1.; 0.]) + .MatrixEq([[1.; 0.; 0. ;0.]; [0.; 1.; 0.; 0.]; [0.; 0.; 1.; 0.]; [0.; 0.; 0.; 1.]; [0.; -1.; 0.; 1.]; [0.; 0.; -1.; 1.]; [0.; 0.; 0.; -1.]; [0.; 0.; -1.; 0.]; [-1.; 0.; 1.; 0.]]) + .VectorEq([0.; 0.; 0.; 0.]) + .VarLowerBound([0.; 0.; 0.; 0.; 0.; 0.; 0.; 0.; 0.]) + .VarUpperBound([5.; 8.; 5.; 3.; 4.; 5.; 6.; 6.; 4.]) + .Algorithm(LP CLP) + +let slvr = opts |> lpSolve +slvr |> SolverSummary diff --git a/examples/fsharp/network-max-flow.fsx b/examples/fsharp/network-max-flow.fsx index 33ce5c1dfd..7a9fb95e83 100644 --- a/examples/fsharp/network-max-flow.fsx +++ b/examples/fsharp/network-max-flow.fsx @@ -1,3 +1,33 @@ +(* + + Copyright 2010-2017 Google + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Answer: + Solving max flow with 6 nodes, and 9 arcs, source=0, sink=5 + total computed flow 10, expected = 10 + Arc 1 (1 -> 0), capacity=5, computed=4, expected=4 + Arc 2 (2 -> 0), capacity=8, computed=4, expected=4 + Arc 3 (3 -> 0), capacity=5, computed=2, expected=2 + Arc 4 (4 -> 0), capacity=3, computed=0, expected=0 + Arc 5 (3 -> 1), capacity=4, computed=4, expected=4 + Arc 6 (4 -> 2), capacity=5, computed=4, expected=4 + Arc 7 (4 -> 3), capacity=6, computed=0, expected=0 + Arc 8 (5 -> 3), capacity=6, computed=6, expected=6 + Arc 9 (5 -> 4), capacity=4, computed=4, expected=4 + +*) + #I "./lib" #load "Google.OrTools.FSharp.fsx" @@ -5,7 +35,7 @@ open Google.OrTools.Graph open Google.OrTools.FSharp printfn "Max Flow Problem" -let numNodes = 6; +let numNodes = 6; let numArcs = 9; let tails = [0; 0; 0; 0; 1; 2; 3; 3; 4] let heads = [1; 2; 3; 4; 3; 4; 4; 5; 5] @@ -25,7 +55,7 @@ printfn "Solving max flow with %i nodes, and %i arcs, source=%i, sink=%i " numNo let solveStatus = maxFlow.Solve(source, sink) match solveStatus with -| MaximumFlow.Optimal -> +| x when x = MaximumFlowResult.Optimal.Id -> let totalFlow = maxFlow.OptimalFlow(); printfn "total computed flow %i, expected = %i" totalFlow expectedTotalFlow diff --git a/examples/fsharp/network-min-cost-flow.fsx b/examples/fsharp/network-min-cost-flow.fsx index cfb8b2399c..887c62d0c7 100644 --- a/examples/fsharp/network-min-cost-flow.fsx +++ b/examples/fsharp/network-min-cost-flow.fsx @@ -31,7 +31,7 @@ printfn "Solving min cost flow with %i sources, and %i targets." numSources numT let solveStatus = minCostFlow.Solve(); match solveStatus with -| MinimumCostFlow.Optimal -> +| x when x = MinimumCostFlowResult.Optimal.Id -> printfn "Total computed flow cost = %i, expected = %i" (minCostFlow.OptimalCost()) expectedCost | _ -> printfn "Solving the min cost flow problem failed. Solver status: %i" solveStatus diff --git a/makefiles/Makefile.third_party.unix.mk b/makefiles/Makefile.third_party.unix.mk index 8bd5c048e3..a58796f4cb 100644 --- a/makefiles/Makefile.third_party.unix.mk +++ b/makefiles/Makefile.third_party.unix.mk @@ -1,7 +1,7 @@ # SVN tags of dependencies to checkout. GFLAGS_TAG = 2.2.1 -PROTOBUF_TAG = 3.5.0 +PROTOBUF_TAG = 3.5.1 GLOG_TAG = 0.3.5 CBC_TAG = 2.9.9 @@ -226,14 +226,17 @@ dependencies/sources/glog-$(GLOG_TAG)/CMakeLists.txt: # Install Coin CBC. install_cbc: dependencies/install/bin/cbc -dependencies/install/bin/cbc: dependencies/sources/cbc-$(CBC_TAG)/Makefile - cd dependencies/sources/cbc-$(CBC_TAG) && $(SET_COMPILER) make -j 4 && $(SET_COMPILER) make install +dependencies/install/bin/cbc: dependencies/sources/Cbc-$(CBC_TAG)/Makefile + cd dependencies/sources/Cbc-$(CBC_TAG) && $(SET_COMPILER) make -j 4 && $(SET_COMPILER) make install -dependencies/sources/cbc-$(CBC_TAG)/Makefile: dependencies/sources/cbc-$(CBC_TAG)/Makefile.in - cd dependencies/sources/cbc-$(CBC_TAG) && $(SET_COMPILER) ./configure --prefix=$(OR_ROOT_FULL)/dependencies/install --disable-bzlib --without-lapack --enable-static --with-pic ADD_CXXFLAGS="-DCBC_THREAD_SAFE -DCBC_NO_INTERRUPT $(MAC_VERSION)" +dependencies/sources/Cbc-$(CBC_TAG)/Makefile: dependencies/sources/Cbc-$(CBC_TAG)/Makefile.in + cd dependencies/sources/Cbc-$(CBC_TAG) && $(SET_COMPILER) ./configure --prefix=$(OR_ROOT_FULL)/dependencies/install --disable-bzlib --without-lapack --enable-static --with-pic ADD_CXXFLAGS="-DCBC_THREAD_SAFE -DCBC_NO_INTERRUPT $(MAC_VERSION)" -dependencies/sources/cbc-$(CBC_TAG)/Makefile.in: - svn co https://projects.coin-or.org/svn/Cbc/releases/$(CBC_TAG) dependencies/sources/cbc-$(CBC_TAG) +CBC_ARCHIVE:=https://www.coin-or.org/download/source/Cbc/Cbc-${CBC_TAG}.tgz + +dependencies/sources/Cbc-$(CBC_TAG)/Makefile.in: + wget --continue -P dependencies/archives ${CBC_ARCHIVE} || (@echo wget failed to dowload $(CBC_ARCHIVE), try running 'wget -P dependencies/archives --no-check-certificate $(CBC_ARCHIVE)' then rerun 'make third_party' && exit 1) + tar xzvf dependencies/archives/Cbc-${CBC_TAG}.tgz -C dependencies/sources/ # Install patchelf on linux platforms. dependencies/install/bin/patchelf: dependencies/sources/patchelf-0.8/Makefile @@ -261,8 +264,8 @@ dependencies/install/lib/protobuf.jar: dependencies/install/bin/protoc # Clean everything. clean_third_party: -$(DEL) Makefile.local - -$(DELREC) dependencies/install - -$(DELREC) dependencies/sources/cbc* + -$(DELREC) dependencies/archives/Cbc* + -$(DELREC) dependencies/sources/Cbc* -$(DELREC) dependencies/sources/coin-cbc* -$(DELREC) dependencies/sources/gflags* -$(DELREC) dependencies/sources/glog* @@ -280,6 +283,7 @@ clean_third_party: -$(DELREC) dependencies/sources/flex* -$(DELREC) dependencies/sources/help2man* -$(DELREC) dependencies/sources/patchelf* + -$(DELREC) dependencies/install # Create Makefile.local makefile_third_party: Makefile.local diff --git a/makefiles/Makefile.third_party.win.mk b/makefiles/Makefile.third_party.win.mk index ff58ed5ad7..d267434e3e 100644 --- a/makefiles/Makefile.third_party.win.mk +++ b/makefiles/Makefile.third_party.win.mk @@ -1,6 +1,6 @@ # tags of dependencies to checkout. GFLAGS_TAG = 2.2.1 -PROTOBUF_TAG = 3.5.0 +PROTOBUF_TAG = 3.5.1 GLOG_TAG = 0.3.5 CBC_TAG = 2.9.9 ZLIB_TAG = 1.2.11 @@ -164,11 +164,11 @@ ortools/gen/ortools/sat: download_third_party: \ - dependencies/archives/zlib$(ZLIB_ARCHIVE_TAG).zip \ + dependencies/archives/zlib$(ZLIB_ARCHIVE_TAG).zip \ dependencies/sources/gflags/autogen.sh \ dependencies/sources/protobuf/autogen.sh \ dependencies/archives/swigwin-$(SWIG_TAG).zip \ - dependencies/sources/cbc-$(CBC_TAG)/configure + dependencies/sources/Cbc-$(CBC_TAG)/configure # Directories: .PHONY: install_directories @@ -285,37 +285,39 @@ dependencies/archives/glog-$(GLOG_TAG).zip: # Install Coin CBC. install_coin_cbc: dependencies\install\bin\cbc.exe -dependencies\install\bin\cbc.exe: dependencies\sources\cbc-$(CBC_TAG)\Cbc\MSVisualStudio\v10\$(CBC_PLATFORM)\cbc.exe - copy dependencies\sources\cbc-$(CBC_TAG)\Cbc\MSVisualStudio\v10\$(CBC_PLATFORM)\*.lib dependencies\install\lib\coin - copy dependencies\sources\cbc-$(CBC_TAG)\Cbc\src\*.hpp dependencies\install\include\coin - copy dependencies\sources\cbc-$(CBC_TAG)\Clp\src\*.hpp dependencies\install\include\coin - copy dependencies\sources\cbc-$(CBC_TAG)\Clp\src\OsiClp\*.hpp dependencies\install\include\coin - copy dependencies\sources\cbc-$(CBC_TAG)\CoinUtils\src\*.hpp dependencies\install\include\coin - copy dependencies\sources\cbc-$(CBC_TAG)\Cgl\src\*.hpp dependencies\install\include\coin - copy dependencies\sources\cbc-$(CBC_TAG)\Osi\src\Osi\*.hpp dependencies\install\include\coin - copy dependencies\sources\cbc-$(CBC_TAG)\Cbc\src\*.h dependencies\install\include\coin - copy dependencies\sources\cbc-$(CBC_TAG)\Clp\src\*.h dependencies\install\include\coin - copy dependencies\sources\cbc-$(CBC_TAG)\CoinUtils\src\*.h dependencies\install\include\coin - copy dependencies\sources\cbc-$(CBC_TAG)\Cgl\src\*.h dependencies\install\include\coin - copy dependencies\sources\cbc-$(CBC_TAG)\Osi\src\Osi\*.h dependencies\install\include\coin - copy dependencies\sources\cbc-$(CBC_TAG)\Cbc\MSVisualStudio\v10\$(CBC_PLATFORM)\cbc.exe dependencies\install\bin +dependencies\install\bin\cbc.exe: dependencies\sources\Cbc-$(CBC_TAG)\Cbc\MSVisualStudio\v10\$(CBC_PLATFORM)\cbc.exe + copy dependencies\sources\Cbc-$(CBC_TAG)\Cbc\MSVisualStudio\v10\$(CBC_PLATFORM)\*.lib dependencies\install\lib\coin + copy dependencies\sources\Cbc-$(CBC_TAG)\Cbc\src\*.hpp dependencies\install\include\coin + copy dependencies\sources\Cbc-$(CBC_TAG)\Clp\src\*.hpp dependencies\install\include\coin + copy dependencies\sources\Cbc-$(CBC_TAG)\Clp\src\OsiClp\*.hpp dependencies\install\include\coin + copy dependencies\sources\Cbc-$(CBC_TAG)\CoinUtils\src\*.hpp dependencies\install\include\coin + copy dependencies\sources\Cbc-$(CBC_TAG)\Cgl\src\*.hpp dependencies\install\include\coin + copy dependencies\sources\Cbc-$(CBC_TAG)\Osi\src\Osi\*.hpp dependencies\install\include\coin + copy dependencies\sources\Cbc-$(CBC_TAG)\Cbc\src\*.h dependencies\install\include\coin + copy dependencies\sources\Cbc-$(CBC_TAG)\Clp\src\*.h dependencies\install\include\coin + copy dependencies\sources\Cbc-$(CBC_TAG)\CoinUtils\src\*.h dependencies\install\include\coin + copy dependencies\sources\Cbc-$(CBC_TAG)\Cgl\src\*.h dependencies\install\include\coin + copy dependencies\sources\Cbc-$(CBC_TAG)\Osi\src\Osi\*.h dependencies\install\include\coin + copy dependencies\sources\Cbc-$(CBC_TAG)\Cbc\MSVisualStudio\v10\$(CBC_PLATFORM)\cbc.exe dependencies\install\bin -dependencies\sources\cbc-$(CBC_TAG)\Cbc\MSVisualStudio\v10\$(CBC_PLATFORM)\cbc.exe: dependencies\sources\cbc-$(CBC_TAG)\configure - tools\upgrade_vs_project.cmd dependencies\\sources\\cbc-$(CBC_TAG)\\Clp\\MSVisualStudio\\v10\\libOsiClp\\libOsiClp.vcxproj $(VS_RELEASE) - tools\upgrade_vs_project.cmd dependencies\\sources\\cbc-$(CBC_TAG)\\Clp\\MSVisualStudio\\v10\\libClp\\libClp.vcxproj $(VS_RELEASE) - tools\upgrade_vs_project.cmd dependencies\\sources\\cbc-$(CBC_TAG)\\Cbc\\MSVisualStudio\\v10\\libOsiCbc\\libOsiCbc.vcxproj $(VS_RELEASE) - tools\upgrade_vs_project.cmd dependencies\\sources\\cbc-$(CBC_TAG)\\Cbc\\MSVisualStudio\\v10\\libCbc\\libCbc.vcxproj $(VS_RELEASE) - tools\upgrade_vs_project.cmd dependencies\\sources\\cbc-$(CBC_TAG)\\Cbc\\MSVisualStudio\\v10\\cbc\\cbc.vcxproj $(VS_RELEASE) - tools\upgrade_vs_project.cmd dependencies\\sources\\cbc-$(CBC_TAG)\\Cbc\\MSVisualStudio\\v10\\libCbcSolver\\libCbcSolver.vcxproj $(VS_RELEASE) - tools\upgrade_vs_project.cmd dependencies\\sources\\cbc-$(CBC_TAG)\\Osi\\MSVisualStudio\\v10\\libOsi\\libOsi.vcxproj $(VS_RELEASE) - tools\upgrade_vs_project.cmd dependencies\\sources\\cbc-$(CBC_TAG)\\CoinUtils\\MSVisualStudio\\v10\\libCoinUtils\\libCoinUtils.vcxproj $(VS_RELEASE) - tools\upgrade_vs_project.cmd dependencies\\sources\\cbc-$(CBC_TAG)\\Cgl\\MSVisualStudio\\v10\\libCgl\\libCgl.vcxproj $(VS_RELEASE) - tools\sed -i 's/CBC_BUILD;/CBC_BUILD;CBC_THREAD_SAFE;CBC_NO_INTERRUPT;/g' dependencies\\sources\\cbc-$(CBC_TAG)\\Cbc\\MSVisualStudio\\v10\\libCbcSolver\\libCbcSolver.vcxproj - cd dependencies\sources\cbc-$(CBC_TAG)\Cbc\MSVisualStudio\v10 && msbuild Cbc.sln /t:cbc /p:Configuration=Release;BuildCmd=ReBuild +dependencies\sources\Cbc-$(CBC_TAG)\Cbc\MSVisualStudio\v10\$(CBC_PLATFORM)\cbc.exe: dependencies\sources\Cbc-$(CBC_TAG)\configure + tools\upgrade_vs_project.cmd dependencies\\sources\\Cbc-$(CBC_TAG)\\Clp\\MSVisualStudio\\v10\\libOsiClp\\libOsiClp.vcxproj $(VS_RELEASE) + tools\upgrade_vs_project.cmd dependencies\\sources\\Cbc-$(CBC_TAG)\\Clp\\MSVisualStudio\\v10\\libClp\\libClp.vcxproj $(VS_RELEASE) + tools\upgrade_vs_project.cmd dependencies\\sources\\Cbc-$(CBC_TAG)\\Cbc\\MSVisualStudio\\v10\\libOsiCbc\\libOsiCbc.vcxproj $(VS_RELEASE) + tools\upgrade_vs_project.cmd dependencies\\sources\\Cbc-$(CBC_TAG)\\Cbc\\MSVisualStudio\\v10\\libCbc\\libCbc.vcxproj $(VS_RELEASE) + tools\upgrade_vs_project.cmd dependencies\\sources\\Cbc-$(CBC_TAG)\\Cbc\\MSVisualStudio\\v10\\cbc\\cbc.vcxproj $(VS_RELEASE) + tools\upgrade_vs_project.cmd dependencies\\sources\\Cbc-$(CBC_TAG)\\Cbc\\MSVisualStudio\\v10\\libCbcSolver\\libCbcSolver.vcxproj $(VS_RELEASE) + tools\upgrade_vs_project.cmd dependencies\\sources\\Cbc-$(CBC_TAG)\\Osi\\MSVisualStudio\\v10\\libOsi\\libOsi.vcxproj $(VS_RELEASE) + tools\upgrade_vs_project.cmd dependencies\\sources\\Cbc-$(CBC_TAG)\\CoinUtils\\MSVisualStudio\\v10\\libCoinUtils\\libCoinUtils.vcxproj $(VS_RELEASE) + tools\upgrade_vs_project.cmd dependencies\\sources\\Cbc-$(CBC_TAG)\\Cgl\\MSVisualStudio\\v10\\libCgl\\libCgl.vcxproj $(VS_RELEASE) + tools\sed -i 's/CBC_BUILD;/CBC_BUILD;CBC_THREAD_SAFE;CBC_NO_INTERRUPT;/g' dependencies\\sources\\Cbc-$(CBC_TAG)\\Cbc\\MSVisualStudio\\v10\\libCbcSolver\\libCbcSolver.vcxproj + cd dependencies\sources\Cbc-$(CBC_TAG)\Cbc\MSVisualStudio\v10 && msbuild Cbc.sln /t:cbc /p:Configuration=Release;BuildCmd=ReBuild -dependencies\sources\cbc-$(CBC_TAG)\configure: - svn co https://projects.coin-or.org/svn/Cbc/releases/$(CBC_TAG) dependencies/sources/cbc-$(CBC_TAG) +CBC_ARCHIVE:=https://www.coin-or.org/download/source/Cbc/Cbc-${CBC_TAG}.zip +dependencies\sources\Cbc-$(CBC_TAG)\configure: + tools\wget --continue -P dependencies\archives --no-check-certificate ${CBC_ARCHIVE} || (@echo wget failed to dowload $(CBC_ARCHIVE), try running 'tools\wget -P dependencies\archives --no-check-certificate $(CBC_ARCHIVE)' then rerun 'make third_party' && exit 1) + tools\unzip -d dependencies\sources dependencies\archives\Cbc-$(CBC_TAG).zip # Install SWIG. install_swig: dependencies\install\swigwin-$(SWIG_TAG)\swig.exe @@ -344,24 +346,24 @@ kill_tortoisesvn_cache: remove_readonly_svn_attribs: kill_tortoisesvn_cache if exist dependencies\sources\* $(ATTRIB) -r /s dependencies\sources\* - # Clean everything. Remember to also delete archived dependencies, i.e. in the event of download failure, etc. clean_third_party: remove_readonly_svn_attribs -$(DEL) Makefile.local -$(DEL) dependencies\archives\swigwin*.zip + -$(DEL) dependencies\archives\Cbc* -$(DEL) dependencies\archives\gflags*.zip -$(DEL) dependencies\archives\sparsehash*.zip -$(DEL) dependencies\archives\zlib*.zip -$(DEL) dependencies\archives\v*.zip -$(DEL) dependencies\archives\win_flex_bison*.zip - -$(DELREC) dependencies\install - -$(DELREC) dependencies\sources\cbc-* + -$(DELREC) dependencies\sources\Cbc-* -$(DELREC) dependencies\sources\gflags* -$(DELREC) dependencies\sources\glpk* -$(DELREC) dependencies\sources\google* -$(DELREC) dependencies\sources\protobuf* -$(DELREC) dependencies\sources\sparsehash* -$(DELREC) dependencies\sources\zlib* + -$(DELREC) dependencies\install # Create Makefile.local makefile_third_party: Makefile.local diff --git a/test.py.in b/test.py.in new file mode 100644 index 0000000000..49aaf8876e --- /dev/null +++ b/test.py.in @@ -0,0 +1,33 @@ +from ortools.linear_solver import pywraplp +from ortools.constraint_solver import pywrapcp +from ortools.sat import pywrapsat +from ortools.graph import pywrapgraph +from ortools.algorithms import pywrapknapsack_solver +from ortools.data import pywraprcpsp + +def lpsolver(): + print('Test lpsolver...') + lpsolver = pywraplp.Solver( + 'LinearTest', + pywraplp.Solver.GLOP_LINEAR_PROGRAMMING) + lpsolver.Solve() + print('Test lpsolver...DONE') + +def cpsolver(): + print('Test cpsolver...') + cpsolver = pywrapcp.Solver('ConstraintTest') + num_vals = 3 + x = cpsolver.IntVar(0, num_vals - 1, "x") + y = cpsolver.IntVar(0, num_vals - 1, "y") + z = cpsolver.IntVar(0, num_vals - 1, "z") + cpsolver.Add(x != y) + db = cpsolver.Phase([x, y, z], cpsolver.CHOOSE_FIRST_UNBOUND, cpsolver.ASSIGN_MIN_VALUE) + cpsolver.Solve(db) + print('Test cpsolver...DONE') + +def main(): + lpsolver() + cpsolver() + +if __name__ == "__main__": + main() diff --git a/tools/build_delivery_mac.sh b/tools/build_delivery_mac.sh index b4e540ae5a..1b9ab72d49 100755 --- a/tools/build_delivery_mac.sh +++ b/tools/build_delivery_mac.sh @@ -1,34 +1,74 @@ #!/bin/bash -echo Cleaning or-tools -make clean -echo Builing all libraries -make all fz -j 5 UNIX_PYTHON_VER=2.7 -echo Running tests -make test UNIX_PYTHON_VER=2.7 +set -x +set -e -echo Creating standard artifacts. +echo Rebuilding or-tools... +make clean +make all fz -j 5 UNIX_PYTHON_VER=2.7 +make test UNIX_PYTHON_VER=2.7 +echo Rebuilding or-tools...DONE + +echo Creating standard artifacts... rm -rf temp *.tar.gz make archive fz_archive python_examples_archive UNIX_PYTHON_VER=2.7 -make clean_python UNIX_PYTHON_VER=2.7 +echo Creating standard artifacts...DONE -echo Rebuilding for python 2.7 -rm -rf temp-python2.7 +echo Rebuilding for Python 2.7... +make clean_python UNIX_PYTHON_VER=2.7 make python UNIX_PYTHON_VER=2.7 -j 5 make test_python UNIX_PYTHON_VER=2.7 -make pypi_upload UNIX_PYTHON_VER=2.7 -make clean_python UNIX_PYTHON_VER=2.7 +make pypi_archive UNIX_PYTHON_VER=2.7 +echo Rebuilding for Python 2.7...DONE +echo Creating Python 2.7 venv... +TEMP_DIR=temp-python2.7 +VENV_DIR=${TEMP_DIR}/venv +python2.7 -m pip install --user virtualenv +python2.7 -m virtualenv -p python2.7 ${VENV_DIR} +VENV_BIN=${VENV_DIR}/bin/python +# Bug: setup.py must be run in this directory ! +(cd ${TEMP_DIR}/ortools && ../venv/bin/python setup.py install) +cp test.py.in ${TEMP_DIR}/venv/test.py +echo Creating Python 2.7 venv...DONE -echo Rebuilding for python 3.5 -rm -rf temp-python3.5 +echo Rebuilding for Python 3.5 +make clean_python UNIX_PYTHON_VER=3.5 make python UNIX_PYTHON_VER=3.5 -j 5 make test_python UNIX_PYTHON_VER=3.5 -make pypi_upload UNIX_PYTHON_VER=3.5 -make clean_python UNIX_PYTHON_VER=3.5 +make pypi_archive UNIX_PYTHON_VER=3.5 +echo Rebuilding for Python 3.5...DONE +echo Creating Python 3.5 venv... +TEMP_DIR=temp-python3.5 +VENV_DIR=${TEMP_DIR}/venv +python3.5 -m pip install --user virtualenv +python3.5 -m virtualenv -p python3.5 ${VENV_DIR} +VENV_BIN=${VENV_DIR}/bin/python +# Bug: setup.py must be run in this directory ! +(cd ${TEMP_DIR}/ortools && ../venv/bin/python setup.py install) +cp test.py.in ${TEMP_DIR}/venv/test.py +echo Creating Python 3.5 venv...DONE -echo Rebuilding for python 3.6 -rm -rf temp-python3.6 +echo Rebuilding for Python 3.6 +make clean_python UNIX_PYTHON_VER=3.6 make python UNIX_PYTHON_VER=3.6 -j 5 make test_python UNIX_PYTHON_VER=3.6 -make pypi_upload UNIX_PYTHON_VER=3.6 -make clean_python UNIX_PYTHON_VER=3.6 +make pypi_archive UNIX_PYTHON_VER=3.6 +echo Rebuilding for Python 3.6...DONE +echo Creating Python 3.6 venv... +TEMP_DIR=temp-python3.6 +VENV_DIR=${TEMP_DIR}/venv +python3.6 -m pip install --user virtualenv +python3.6 -m virtualenv -p python3.6 ${VENV_DIR} +VENV_BIN=${VENV_DIR}/bin/python +# Bug: setup.py must be run in this directory ! +(cd ${TEMP_DIR}/ortools && ../venv/bin/python setup.py install) +cp test.py.in ${TEMP_DIR}/venv/test.py +echo Creating Python 3.6 venv...DONE +# To be sure to have sandboxed library (i.e. @loader_path) +make clean_cc + +echo Testing in virtualenv... +temp-python2.7/venv/bin/python temp-python2.7/venv/test.py +temp-python3.5/venv/bin/python temp-python3.5/venv/test.py +temp-python3.6/venv/bin/python temp-python3.6/venv/test.py +echo Testing in virtualenv...DONE diff --git a/tools/fix_python_libraries_on_mac.sh b/tools/fix_python_libraries_on_mac.sh index 9d754446ad..040d473934 100755 --- a/tools/fix_python_libraries_on_mac.sh +++ b/tools/fix_python_libraries_on_mac.sh @@ -5,4 +5,5 @@ install_name_tool -change $P @loader_path/../libortools.dylib $1/ortools/ortools install_name_tool -change $P @loader_path/../libortools.dylib $1/ortools/ortools/constraint_solver/_pywrapcp.so install_name_tool -change $P @loader_path/../libortools.dylib $1/ortools/ortools/graph/_pywrapgraph.so install_name_tool -change $P @loader_path/../libortools.dylib $1/ortools/ortools/linear_solver/_pywraplp.so -install_name_tool -change $P @loader_path/../libortools.dylib $1/ortools/ortools/linear_solver/_pywrapsat.so +install_name_tool -change $P @loader_path/../libortools.dylib $1/ortools/ortools/sat/_pywrapsat.so +install_name_tool -change $P @loader_path/../libortools.dylib $1/ortools/ortools/data/_pywraprcpsp.so diff --git a/tools/publish_delivery_mac.sh b/tools/publish_delivery_mac.sh new file mode 100755 index 0000000000..a929781f5d --- /dev/null +++ b/tools/publish_delivery_mac.sh @@ -0,0 +1,9 @@ +#!/bin/bash +set -x +set -e + +echo Uploading all Python artifacts... +make pypi_upload UNIX_PYTHON_VER=2.7 +make pypi_upload UNIX_PYTHON_VER=3.5 +make pypi_upload UNIX_PYTHON_VER=3.6 +echo Uploading all Python artifacts...DONE