Google脚本优化
问题描述:
我编写了一个Google脚本来优化数学编程问题,但我无法弄清楚如何使用优化脚本在电子表格中显示最佳解决方案。Google脚本优化
下面是谷歌脚本:
function myFunction() {
var engine = LinearOptimizationService.createEngine();
// Add variables, constraints and define the objective with addVariable(), addConstraint(), etc.
// Add two variables, 0 <= x <= 10 and 0 <= y <= 5
engine.addVariable('x', 0, 10);
engine.addVariable('y', 0, 5);
// Create the constraint: 0 <= 2 * x + 5 * y <= 10
var constraint = engine.addConstraint(0, 10);
constraint.setCoefficient('x', 2);
constraint.setCoefficient('y', 5);
// Create the constraint: 0 <= 10 * x + 3 * y <= 20
var constraint = engine.addConstraint(0, 20);
constraint.setCoefficient('x', 10);
constraint.setCoefficient('y', 3);
// Set the objective to be x + y
engine.setObjectiveCoefficient('x', 1);
engine.setObjectiveCoefficient('y', 1);
// Engine should maximize the objective
engine.setMaximization();
// Solve the linear program
var solution = engine.solve();
任何帮助将不胜感激。
答
下面提供了完整的工作代码。您需要添加一个函数将解决方案写入活动电子表格。为此,我添加了一个新函数addSolution(solution)
,然后将solution
对象的每个成员写入其各自的单元格。
function myFunction() {
var engine = LinearOptimizationService.createEngine();
// Add variables, constraints and define the objective with addVariable(), addConstraint(), etc.
// Add two variables, 0 <= x <= 10 and 0 <= y <= 5
engine.addVariable('x', 0, 10);
engine.addVariable('y', 0, 5);
// Create the constraint: 0 <= 2 * x + 5 * y <= 10
var constraint = engine.addConstraint(0, 10);
constraint.setCoefficient('x', 2);
constraint.setCoefficient('y', 5);
// Create the constraint: 0 <= 10 * x + 3 * y <= 20
var constraint = engine.addConstraint(0, 20);
constraint.setCoefficient('x', 10);
constraint.setCoefficient('y', 3);
// Set the objective to be x + y
engine.setObjectiveCoefficient('x', 1);
engine.setObjectiveCoefficient('y', 1);
// Engine should maximize the objective
engine.setMaximization();
// Solve the linear program
var solution = engine.solve();
addProduct(solution)
}
function addSolution(solution) {
var sheet = SpreadsheetApp.getActiveSheet();
sheet.appendRow([solution.getObjectiveValue(), solution.getStatus(), solution.getVariableValue('x'), solution.getVariableValue('y'),solution.isValid()]);
}
+0
谢谢。我会试一试。 – user7686691
+0
@ user7686691请在您决定解决问题后点击旁边的复选标记来接受答案。 – Ahmedov
请提供更多详情。你试图完成什么任务?您是否想要将解决方案变量序列化为电子表格?你想将输出流式传输到文件中吗?你做了什么尝试?结果是什么? – Ahmedov
我想将解决方案的值发送到调用函数的电子表格。我尝试使用谷歌脚本solution.getvariable和solution.getobjectivefunction调用并返回调用,电子表格中没有显示任何内容。 – user7686691