Create Your Own Solver based on JavaSolver
To define your optimization problem, you need to create a Java subclass, e.g. MySolver, of the standard class JavaSolver similarly to the ProblemZoo in the Introductory Example:
Creating Constrained Variables
To create a constrained integer variable with the name “Amount” and possible values between 0 and 1000, you may write:
Var amountVar = csp.variable(“Amount”, 0, 1000);
To create a constrained variable with the name “Assigned” and possible values between 0 or 1, you may write:
VarBool assignVar = csp.variableBool(“Assigned”);
Creating Constrained Expressions
To create a constrained variable equal to (amountVar plus 50) , you may write:
Var plus5 =amountVar.plus(50);
If you have 3 variables X, Y, and Z already defined, you may write the expression XY-Z as follows:
Var objective = x.multiply(y).minus(z);
Creating Arrays, Sums, and Scalar Products
Let’s say you want to create variables that represent working hour during 7 days of a week (0-Mon, 1-Tue,…, 6-Sun). You may create an array with the name “DailyHours” that contains 7 constrained integer variables with possible values between 0 and 8:
Var[] dailyHours = csp.variableArray(“DailyHours”, 0, 8, 7);
To create a sum of all variables in this array, you may write:
Var totalNumberOfWorkHours = csp.sum(dailyHours);
You may define the hourly costs for every day of the week:
int[] costs = new int[] { 40, 40, 40, 40, 40, 70, 70 };
Then a person’s weekly earning can be expressed as the following scalar product:
Var weeklyEarning = csp.scalProd(costs, dailyHours);
Posting Arithmetic and Logical Constraints
To state that our amountVar should be more or equal to 500, you may post this constraint:
csp.post(amountVar, “>=”, 500);
To state that X + Y = Z, you may post this constraint:
csp.post(x.plus(y), “=”, z);
To state that a person cannot work more than 40 hours per week, you may post the constraint:
csp.post(totalNumberOfWorkHours, “<=”, 40);
To state that a person cannot work on Sunday (day# 6), you may post the constraint:
csp.post(dailyHours[6], “=”, 0);
To state that a person should earn at least $1,280, you may post the constraint:
csp.post(weeklyEarning, “>=”, 1280);
To state that if a person works on Saturday she cannot work on Sunday, you may write:
Constraint worksOnSat = csp.linear(dailyHours[5], “>”, 0);
Constraint doesNotWorkOnSun = csp.linear(dailyHours[6], “=”, 0);
csp.postIfThen(worksOnSat, doesNotWorkOnSun);
To state that all integer variables of the array variables must take different values from each other, you may write:
csp.postAllDifferent(variables);
You may find more complex predefined constraints in the JSR-331 User Manual.
Defining Optimization Objective
You may make any constrained variable to be your optimization objective, e.g,
setObjective(weeklyEarning);
will make your objective that you want to maximize or minimize – see Solving Optimization Problem.
