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(); 

任何帮助将不胜感激。

+0

请提供更多详情。你试图完成什么任务?您是否想要将解决方案变量序列化为电子表格?你想将输出流式传输到文件中吗?你做了什么尝试?结果是什么? – Ahmedov

+0

我想将解决方案的值发送到调用函数的电子表格。我尝试使用谷歌脚本solution.getvariable和solution.getobjectivefunction调用并返回调用,电子表格中没有显示任何内容。 – user7686691

下面提供了完整的工作代码。您需要添加一个函数将解决方案写入活动电子表格。为此,我添加了一个新函数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