using Google.OrTools.LinearSolver;
public class SimpleMipProgram
int numLoadingPlaces = 5;
int numMaxConstraints = 1;
int valMaxConstraint = 4;
Solver solver = Solver.CreateSolver("SCIP");
Objective objective = solver.Objective();
Variable[,] booking = new Variable[numBookings, numLoadingPlaces];
Variable[] bookingError = new Variable[numBookings];
for (int k=0; k < numBookings; k++)
bookingError[k] = solver.MakeBoolVar("bookingErrork");
Constraint bookingConstraint = solver.MakeConstraint();
bookingConstraint.SetBounds(1.0,1.0) ;
for (int j=0; j < numLoadingPlaces; j++)
booking[k,j] = solver.MakeBoolVar("booking[k,j]");
booking[k,j] = solver.MakeIntVar(0,0,"booking[k,j]");
bookingConstraint.SetCoefficient(booking[k,j],1);
Variable[,] capacity = new Variable[numLoadingPlaces, numTimePeriod];
for (int i=0; i < numTimePeriod; i++) {
Constraint[] maxRestrictionsConstraint = new Constraint[numMaxConstraints] ;
Variable[] maxRestrictionsConstraintError = solver.MakeIntVarArray(numMaxConstraints,0,numBookings);
maxRestrictionsConstraint[0] = solver.MakeConstraint();
maxRestrictionsConstraint[0].SetUb(valMaxConstraint) ;
for (int j=0; j < numLoadingPlaces; j++)
capacity[j,i] = solver.MakeBoolVar("capacity_j,i");
objective.SetCoefficient(capacity[j,i], 1);
Constraint loadingPlaceConstraint = solver.MakeConstraint();
loadingPlaceConstraint.SetUb(1);
loadingPlaceConstraint.SetCoefficient(capacity[j,i],1);
maxRestrictionsConstraint[0].SetCoefficient(capacity[j,i],1);
objective.SetCoefficient(maxRestrictionsConstraintError[0], -10);
maxRestrictionsConstraint[0].SetCoefficient(maxRestrictionsConstraintError[0],-1);
for (int k=0; k < numBookings; k++)
loadingPlaceConstraint.SetCoefficient(booking[k,j],1);
loadingPlaceConstraint.SetCoefficient(bookingError[k],-1);
maxRestrictionsConstraint[0].SetCoefficient(booking[k,j],1);
for (int k=0; k < numBookings; k++)
objective.SetCoefficient(bookingError[k], -10);
objective.SetMaximization();
Solver.ResultStatus resultStatus = solver.Solve();
Console.WriteLine("Solution:");
Console.WriteLine("Objective value = " + solver.Objective().Value());
for (int j=0; j < numLoadingPlaces; j++)
Console.Write("capacity["+j+"]=[ ");
for (int i=0; i < numTimePeriod; i++)
Console.Write(capacity[j,i].SolutionValue() + " ");
for (int k=0; k < numBookings; k++)
Console.Write("booking=["+ k + "] = [");
for (int j=0; j < numLoadingPlaces; j++)
Console.Write(booking[k,j].SolutionValue() + " ");
Console.WriteLine("bookingError=["+ k + "] = " + bookingError[k].SolutionValue() + " ");