2022-06-17 08:40:20 +02:00
|
|
|
// Copyright 2010-2022 Google LLC
|
2014-07-09 12:21:55 +00:00
|
|
|
// 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.
|
2014-07-09 15:18:27 +00:00
|
|
|
|
2013-03-11 11:11:16 +00:00
|
|
|
using System;
|
|
|
|
|
using System.Collections;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.IO;
|
|
|
|
|
using System.Text.RegularExpressions;
|
2019-02-20 16:25:19 +01:00
|
|
|
using Xunit;
|
2013-03-11 11:11:16 +00:00
|
|
|
using Google.OrTools.ConstraintSolver;
|
|
|
|
|
|
2020-11-03 10:04:19 +01:00
|
|
|
namespace Google.OrTools.Tests
|
|
|
|
|
{
|
2022-01-10 18:44:12 +01:00
|
|
|
public class Issue22Test
|
|
|
|
|
{
|
|
|
|
|
private long Solve(long num_buses_check = 0)
|
2020-11-03 10:04:19 +01:00
|
|
|
{
|
2022-01-10 18:44:12 +01:00
|
|
|
ConstraintSolverParameters sPrm = Solver.DefaultSolverParameters();
|
|
|
|
|
sPrm.CompressTrail = 0;
|
|
|
|
|
Solver solver = new Solver("OrTools", sPrm);
|
2013-03-11 11:11:16 +00:00
|
|
|
|
2022-01-10 18:44:12 +01:00
|
|
|
// this works
|
|
|
|
|
// IntVar[,] x = solver.MakeIntVarMatrix(2,2, new int[] {-2,0,1,2}, "x");
|
2013-03-11 11:11:16 +00:00
|
|
|
|
2022-01-10 18:44:12 +01:00
|
|
|
// this doesn't work
|
|
|
|
|
IntVar[,] x = solver.MakeIntVarMatrix(2, 2, new int[] { 0, 1, 2 }, "x");
|
2013-03-11 11:11:16 +00:00
|
|
|
|
2022-01-10 18:44:12 +01:00
|
|
|
for (int w = 0; w < 2; w++)
|
|
|
|
|
{
|
|
|
|
|
IntVar[] b = new IntVar[2];
|
|
|
|
|
for (int i = 0; i < 2; i++)
|
2020-11-03 10:04:19 +01:00
|
|
|
{
|
2022-01-10 18:44:12 +01:00
|
|
|
b[i] = solver.MakeIsEqualCstVar(x[w, i], 0);
|
2020-11-03 10:04:19 +01:00
|
|
|
}
|
2022-01-10 18:44:12 +01:00
|
|
|
solver.Add(solver.MakeSumGreaterOrEqual(b, 2));
|
|
|
|
|
}
|
2013-03-11 11:11:16 +00:00
|
|
|
|
2022-01-10 18:44:12 +01:00
|
|
|
IntVar[] x_flat = x.Flatten();
|
|
|
|
|
DecisionBuilder db = solver.MakePhase(x_flat, Solver.CHOOSE_FIRST_UNBOUND, Solver.ASSIGN_MIN_VALUE);
|
|
|
|
|
solver.NewSearch(db);
|
|
|
|
|
while (solver.NextSolution())
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("x: ");
|
|
|
|
|
for (int j = 0; j < 2; j++)
|
2020-11-03 10:04:19 +01:00
|
|
|
{
|
2022-01-10 18:44:12 +01:00
|
|
|
Console.Write("worker" + (j + 1).ToString() + ":");
|
|
|
|
|
for (int i = 0; i < 2; i++)
|
2020-11-03 10:04:19 +01:00
|
|
|
{
|
2022-01-10 18:44:12 +01:00
|
|
|
Console.Write(" {0,2} ", x[j, i].Value());
|
2020-11-03 10:04:19 +01:00
|
|
|
}
|
2022-01-10 18:44:12 +01:00
|
|
|
Console.Write("\n");
|
2020-11-03 10:04:19 +01:00
|
|
|
}
|
2022-01-10 18:44:12 +01:00
|
|
|
Console.WriteLine("End at---->" + DateTime.Now);
|
|
|
|
|
}
|
2013-03-11 11:11:16 +00:00
|
|
|
|
2022-01-10 18:44:12 +01:00
|
|
|
Console.WriteLine("\nSolutions: {0}", solver.Solutions());
|
|
|
|
|
Console.WriteLine("WallTime: {0}ms", solver.WallTime());
|
|
|
|
|
Console.WriteLine("Failures: {0}", solver.Failures());
|
|
|
|
|
Console.WriteLine("Branches: {0} ", solver.Branches());
|
2013-03-11 11:11:16 +00:00
|
|
|
|
2022-01-10 18:44:12 +01:00
|
|
|
solver.EndSearch();
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
2013-03-11 11:11:16 +00:00
|
|
|
|
2022-01-10 18:44:12 +01:00
|
|
|
[Fact]
|
|
|
|
|
public void InitialPropagateTest()
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("Check for minimum number of buses: ");
|
|
|
|
|
long num_buses = Solve();
|
|
|
|
|
Console.WriteLine("\n... got {0} as minimal value.", num_buses);
|
|
|
|
|
Console.WriteLine("\nAll solutions: ", num_buses);
|
2020-10-26 18:36:17 +01:00
|
|
|
}
|
2022-01-10 18:44:12 +01:00
|
|
|
}
|
2020-11-03 10:04:19 +01:00
|
|
|
} // namespace Google.OrTools.Tests
|