Java CPLEX中的数独解算器

Java CPLEX中的数独解算器,java,mathematical-optimization,sudoku,cplex,Java,Mathematical Optimization,Sudoku,Cplex,我正在尝试解决我创建的一个数独程序。 这是目标函数 IloNumExpr numExpr = cplex.linearNumExpr(); cplex.addMaximize(numExpr); 我想做的是添加一个约束或新的目标函数,允许9x9数独矩阵中的四个角点按5>7>4>6>8>2>3>9>1的顺序具有特殊偏好 关于完成这项工作需要什么样的数学公式,你有什么想法吗?你可以通过向目标函数中添加元素来施加偏好顺序 假设您有以下类型的变量 选择[行][列][位] 如果选择[2][3][8]=1

我正在尝试解决我创建的一个数独程序。 这是目标函数

IloNumExpr numExpr = cplex.linearNumExpr();
cplex.addMaximize(numExpr);
我想做的是添加一个约束或新的目标函数,允许9x9数独矩阵中的四个角点按
5>7>4>6>8>2>3>9>1的顺序具有特殊偏好


关于完成这项工作需要什么样的数学公式,你有什么想法吗?

你可以通过向目标函数中添加元素来施加偏好顺序

假设您有以下类型的变量

选择[行][列][位] 如果选择[2][3][8]=1,则表示平方(2,3)的值为8

四个角是: 1,1; 1,9; 9,1; 9,9

基本上,您需要将以下内容添加到现有的目标函数中

9 x choose[1][1][5] + 8 x choose[1][1][7] + 7 x choose[1][1][4] + ... + 2 x choose[1][1][9] + 1 x choose[1][1][1]
9 x choose[1][9][5] + 8 x choose[1][9][7] + 7 x choose[1][9][4] + ... + 2 x choose[1][9][9] + 1 x choose[1][9][1]
9 x choose[9][1][5] + 8 x choose[9][1][7] + 7 x choose[9][1][4] + ... + 2 x choose[9][1][9] + 1 x choose[9][1][1]
9 x choose[9][9][5] + 8 x choose[9][9][7] + 7 x choose[9][9][4] + ... + 2 x choose[9][1][9] + 1 x choose[9][9][1]
在CPLEX中 //偏好顺序:5>7>4>6>8>2>3>9>1

  int[]  preferenceOrder;
  preferenceOrder[1] = 9;
  preferenceOrder[2] = 8;  
  preferenceOrder[8] = 2; 
  preferenceOrder[9] = 1;
  cplex.addMaximize(cplex.scalProd(preferenceOrder, choose));
为什么会这样?
CPLEX解算器尝试最大化obj函数的值。在所有其他条件相同的情况下,它将首先尝试将
选择[1][1][5]
设为1,然后尝试将其设为7,依此类推

非常感谢你的帮助。作为一名初级程序员,我真的在尝试为数独提供不同的功能。