Looks like in addAllDifferent you are not allowed to add linear expressions, even though signature of the function allows it.
So you have to introduce additional variables, mark them as equal to those expressions, and then use these for constraints :(
Posting the explicit code, even though you can simplify this by writing your own addAllDifferent
fun main() {
Loader.loadNativeLibraries()
val model = CpModel()
val x = model.newIntVar(1, 100, "x")
val y = model.newIntVar(1, 100, "y")
val z = model.newIntVar(1, 100, "z")
val a11_var = model.newIntVar(1, 100, "a11")
val a12_var = model.newIntVar(1, 100, "a12")
val a13_var = model.newIntVar(1, 100, "a13")
val a21_var = model.newIntVar(1, 100, "a21")
val a23_var = model.newIntVar(1, 100, "a23")
val a31_var = model.newIntVar(1, 100, "a31")
val a32_var = model.newIntVar(1, 100, "a32")
val a33_var = model.newIntVar(1, 100, "a33")
val a11 = LinearExpr.sum(arrayOf(x, y))
val a12 = LinearExpr.weightedSum(arrayOf(x, y, z), longArrayOf(1, -1, -1))
val a13 = LinearExpr.sum(arrayOf(x, z))
val a21 = LinearExpr.weightedSum(arrayOf(x, y, z), longArrayOf(1, -1, 1))
val a23 = LinearExpr.weightedSum(arrayOf(x, y, z), longArrayOf(1, 1, -1))
val a31 = LinearExpr.weightedSum(arrayOf(x, z), longArrayOf(1, -1))
val a32 = LinearExpr.sum(arrayOf(x, y, z))
val a33 = LinearExpr.weightedSum(arrayOf(x, y), longArrayOf(1, -1))
model.addEquality(a11_var, a11)
model.addEquality(a12_var, a12)
model.addEquality(a13_var, a13)
model.addEquality(a21_var, a21)
model.addEquality(a23_var, a23)
model.addEquality(a31_var, a31)
model.addEquality(a32_var, a32)
model.addEquality(a33_var, a33)
val allVars = arrayOf(
a11_var, a12_var, a13_var,
a21_var, x, a23_var,
a31_var, a32_var, a33_var)
model.addAllDifferent(allVars)
model.minimize(a32)
val solver = CpSolver()
val status = solver.solve(model)
if (status == CpSolverStatus.OPTIMAL) {
val xVal = solver.value(x)
val yVal = solver.value(y)
val zVal = solver.value(z)
println("(x, y, z)=($xVal, $yVal, $zVal)")
val a11Val = solver.value(a11_var)
val a12Val = solver.value(a12_var)
val a13Val = solver.value(a13_var)
val a21Val = solver.value(a21_var)
val a23Val = solver.value(a23_var)
val a31Val = solver.value(a31_var)
val a32Val = solver.value(a32_var)
val a33Val = solver.value(a33_var)
println("$a11Val \t $a12Val \t $a13Val")
println("$a21Val \t $xVal \t $a23Val")
println("$a31Val \t $a32Val \t $a33Val")
} else {
println(status)
println(solver.solutionInfo)
}
}
Output
(x, y, z)=(5, 1, 3)
6 1 8
7 5 3
2 9 4