dotnet: Remove reference to dotnet release command
- Currently not implemented... Add abseil patch - Add patches/absl-config.cmake Makefile: Add abseil-cpp on unix - Force abseil-cpp SHA1 to 45221cc note: Just before the PR #136 which break all CMake Makefile: Add abseil-cpp on windows - Force abseil-cpp SHA1 to 45221cc note: Just before the PR #136 which break all CMake CMake: Add abseil-cpp - Force abseil-cpp SHA1 to 45221cc note: Just before the PR #136 which break all CMake port to absl: C++ Part - Fix warning with the use of ABSL_MUST_USE_RESULT > The macro must appear as the very first part of a function declaration or definition: ... Note: past advice was to place the macro after the argument list. src: dependencies/sources/abseil-cpp-master/absl/base/attributes.h:418 - Rename enum after windows clash - Remove non compact table constraints - Change index type from int64 to int in routing library - Fix file_nonport compilation on windows - Fix another naming conflict with windows (NO_ERROR is a macro) - Cleanup hash containers; work on sat internals - Add optional_boolean sub-proto Sync cpp examples with internal code - reenable issue173 after reducing number of loops port to absl: Python Part - Add back cp_model.INT32_MIN|MAX for examples Update Python examples - Add random_tsp.py - Run words_square example - Run magic_square in python tests port to absl: Java Part - Fix compilation of the new routing parameters in java - Protect some code from SWIG parsing Update Java Examples port to absl: .Net Part Update .Net examples work on sat internals; Add C++ CP-SAT CpModelBuilder API; update sample code and recipes to use the new API; sync with internal code Remove VS 2015 in Appveyor-CI - abseil-cpp does not support VS 2015... improve tables upgrade C++ sat examples to use the new API; work on sat internals update license dates rewrite jobshop_ft06_distance.py to use the CP-SAT solver rename last example revert last commit more work on SAT internals fix
This commit is contained in:
@@ -1,126 +1,120 @@
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.Arrays;
|
||||
|
||||
import com.google.ortools.linearsolver.MPConstraint;
|
||||
import com.google.ortools.linearsolver.MPObjective;
|
||||
import com.google.ortools.linearsolver.MPSolver;
|
||||
import com.google.ortools.linearsolver.MPSolver.OptimizationProblemType;
|
||||
import com.google.ortools.linearsolver.MPSolver.ResultStatus;
|
||||
import com.google.ortools.linearsolver.MPVariable;
|
||||
|
||||
|
||||
public class MultiThreadTest {
|
||||
|
||||
static { System.loadLibrary("jniortools"); }
|
||||
|
||||
private final static boolean verboseOutput = false; // To enable Cbc logging
|
||||
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
launchProtocol(10, 8, true);
|
||||
System.out.println("Cbc multi thread test successful");
|
||||
return;
|
||||
}
|
||||
|
||||
public static void launchProtocol(int wholeLoopAttmpts, int threadPoolSize, boolean runInParallel) throws Exception {
|
||||
|
||||
for (int noAttmpt = 0; noAttmpt < wholeLoopAttmpts; noAttmpt++) {
|
||||
|
||||
System.out.println(String.format("Attempt %d", noAttmpt));
|
||||
|
||||
int maxThreads = threadPoolSize;
|
||||
|
||||
List<SolverThread> threadList = new ArrayList<SolverThread>();
|
||||
|
||||
for (int i = 0; i < maxThreads; i++) {
|
||||
SolverThread thread = new SolverThread();
|
||||
threadList.add(thread);
|
||||
}
|
||||
|
||||
ExecutorService executor = Executors.newFixedThreadPool(maxThreads);
|
||||
|
||||
if (runInParallel) {
|
||||
System.out.println("Launching thread pool");
|
||||
executor.invokeAll(threadList);
|
||||
for( SolverThread thread : threadList ) {
|
||||
System.out.println(thread.getStatusSolver().toString());
|
||||
}
|
||||
} else {
|
||||
|
||||
for (SolverThread thread : threadList) {
|
||||
System.out.println("Launching single thread");
|
||||
executor.invokeAll( Arrays.asList(thread) );
|
||||
System.out.println(thread.getStatusSolver().toString());
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println("Attempt finalized!");
|
||||
executor.shutdown();
|
||||
|
||||
}
|
||||
|
||||
System.out.println("Now exiting multi thread execution");
|
||||
|
||||
}
|
||||
|
||||
private static MPSolver makeProblem() {
|
||||
|
||||
MPSolver solver = new MPSolver(UUID.randomUUID().toString(), OptimizationProblemType.CBC_MIXED_INTEGER_PROGRAMMING);
|
||||
|
||||
double infinity = MPSolver.infinity();
|
||||
|
||||
// x1 and x2 are integer non-negative variables.
|
||||
MPVariable x1 = solver.makeIntVar(0.0, infinity, "x1");
|
||||
MPVariable x2 = solver.makeIntVar(0.0, infinity, "x2");
|
||||
|
||||
// Minimize x1 + 2 * x2.
|
||||
MPObjective objective = solver.objective();
|
||||
objective.setCoefficient(x1, 1);
|
||||
objective.setCoefficient(x2, 2);
|
||||
|
||||
// 2 * x2 + 3 * x1 >= 17.
|
||||
MPConstraint ct = solver.makeConstraint(17, infinity);
|
||||
ct.setCoefficient(x1, 3);
|
||||
ct.setCoefficient(x2, 2);
|
||||
|
||||
if (verboseOutput) {
|
||||
solver.enableOutput();
|
||||
}
|
||||
|
||||
return solver;
|
||||
|
||||
}
|
||||
|
||||
private final static class SolverThread implements Callable<MPSolver.ResultStatus> {
|
||||
|
||||
private MPSolver.ResultStatus statusSolver;
|
||||
|
||||
public SolverThread() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultStatus call() throws Exception {
|
||||
MPSolver solver = makeProblem();
|
||||
statusSolver = solver.solve();
|
||||
|
||||
// Check that the problem has an optimal solution.
|
||||
if ( MPSolver.ResultStatus.OPTIMAL.equals(statusSolver) ) {
|
||||
throw new RuntimeException("Non OPTIMAL status after solve.");
|
||||
}
|
||||
return statusSolver;
|
||||
|
||||
}
|
||||
|
||||
public MPSolver.ResultStatus getStatusSolver() {
|
||||
return statusSolver;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
import com.google.ortools.linearsolver.MPConstraint;
|
||||
import com.google.ortools.linearsolver.MPObjective;
|
||||
import com.google.ortools.linearsolver.MPSolver;
|
||||
import com.google.ortools.linearsolver.MPSolver.OptimizationProblemType;
|
||||
import com.google.ortools.linearsolver.MPSolver.ResultStatus;
|
||||
import com.google.ortools.linearsolver.MPVariable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
public class MultiThreadTest {
|
||||
|
||||
static {
|
||||
System.loadLibrary("jniortools");
|
||||
}
|
||||
|
||||
private static final boolean verboseOutput = false; // To enable Cbc logging
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
launchProtocol(10, 8, true);
|
||||
System.out.println("Cbc multi thread test successful");
|
||||
return;
|
||||
}
|
||||
|
||||
public static void launchProtocol(int wholeLoopAttmpts, int threadPoolSize, boolean runInParallel)
|
||||
throws Exception {
|
||||
|
||||
for (int noAttmpt = 0; noAttmpt < wholeLoopAttmpts; noAttmpt++) {
|
||||
|
||||
System.out.println(String.format("Attempt %d", noAttmpt));
|
||||
|
||||
int maxThreads = threadPoolSize;
|
||||
|
||||
List<SolverThread> threadList = new ArrayList<SolverThread>();
|
||||
|
||||
for (int i = 0; i < maxThreads; i++) {
|
||||
SolverThread thread = new SolverThread();
|
||||
threadList.add(thread);
|
||||
}
|
||||
|
||||
ExecutorService executor = Executors.newFixedThreadPool(maxThreads);
|
||||
|
||||
if (runInParallel) {
|
||||
System.out.println("Launching thread pool");
|
||||
executor.invokeAll(threadList);
|
||||
for (SolverThread thread : threadList) {
|
||||
System.out.println(thread.getStatusSolver().toString());
|
||||
}
|
||||
} else {
|
||||
|
||||
for (SolverThread thread : threadList) {
|
||||
System.out.println("Launching single thread");
|
||||
executor.invokeAll(Arrays.asList(thread));
|
||||
System.out.println(thread.getStatusSolver().toString());
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println("Attempt finalized!");
|
||||
executor.shutdown();
|
||||
}
|
||||
|
||||
System.out.println("Now exiting multi thread execution");
|
||||
}
|
||||
|
||||
private static MPSolver makeProblem() {
|
||||
|
||||
MPSolver solver =
|
||||
new MPSolver(
|
||||
UUID.randomUUID().toString(), OptimizationProblemType.CBC_MIXED_INTEGER_PROGRAMMING);
|
||||
|
||||
double infinity = MPSolver.infinity();
|
||||
|
||||
// x1 and x2 are integer non-negative variables.
|
||||
MPVariable x1 = solver.makeIntVar(0.0, infinity, "x1");
|
||||
MPVariable x2 = solver.makeIntVar(0.0, infinity, "x2");
|
||||
|
||||
// Minimize x1 + 2 * x2.
|
||||
MPObjective objective = solver.objective();
|
||||
objective.setCoefficient(x1, 1);
|
||||
objective.setCoefficient(x2, 2);
|
||||
|
||||
// 2 * x2 + 3 * x1 >= 17.
|
||||
MPConstraint ct = solver.makeConstraint(17, infinity);
|
||||
ct.setCoefficient(x1, 3);
|
||||
ct.setCoefficient(x2, 2);
|
||||
|
||||
if (verboseOutput) {
|
||||
solver.enableOutput();
|
||||
}
|
||||
|
||||
return solver;
|
||||
}
|
||||
|
||||
private static final class SolverThread implements Callable<MPSolver.ResultStatus> {
|
||||
|
||||
private MPSolver.ResultStatus statusSolver;
|
||||
|
||||
public SolverThread() {}
|
||||
|
||||
@Override
|
||||
public ResultStatus call() throws Exception {
|
||||
MPSolver solver = makeProblem();
|
||||
statusSolver = solver.solve();
|
||||
|
||||
// Check that the problem has an optimal solution.
|
||||
if (MPSolver.ResultStatus.OPTIMAL.equals(statusSolver)) {
|
||||
throw new RuntimeException("Non OPTIMAL status after solve.");
|
||||
}
|
||||
return statusSolver;
|
||||
}
|
||||
|
||||
public MPSolver.ResultStatus getStatusSolver() {
|
||||
return statusSolver;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user