我正在使用 Java 的 Lpsolve 库来解决线性规划问题。 在 Lpsolve 帮助 API 中,开发人员给出了一个将约束矩阵填充为以空格分隔的 String 类型字符串的示例:
LpSolve solver = LpSolve.makeLp(0, 4);
// add constraints
solver.strAddConstraint("3 2 2 1", LpSolve.LE, 4);
solver.strAddConstraint("0 4 3 1", LpSolve.GE, 3);
如果系数不多,这个方法可能是可行的。但如果LP任务相当困难,那么如何记住变量的位置呢?如何快速生成指标向量,尤其是整行系数中只出现一个单位的二元指标向量?那么在没有系数名称的情况下如何读取优化结果呢?
分享您的使用体验
阅读 Lp 解决 API :)
使用描述性变量名称:
String[] variableNames = {"x1", "x2", "x3", "x4", "x5"};
生成二进制向量的函数:如前所述,您可以使用生成这些向量的辅助函数。该函数创建一个数组,除了指定索引处的“1”之外,大部分都用零填充。
private double[] generateBinaryVector(int size, int activeIndex) {
double[] vector = new double[size];
Arrays.fill(vector, 0);
if (activeIndex >= 0 && activeIndex < size) {
vector[activeIndex] = 1;
}
return vector;
}
在 LpSolve 中设置列名称
for (int i = 0; i < variableNames.length; i++) {
solver.setColName(i + 1, variableNames[i]);
}
// After solving:
for (int i = 1; i <= solver.getNcolumns(); i++) {
System.out.println(solver.getColName(i) + " = " + solver.getVarPrimalresult(i));
}