1

我正在尝试使用 VB.NET 中的 Microsoft Solver Foundation 重新生成以下 Excel Solver GRG 非线性优化(为了本示例,数字已简化):

  1. 目标:总 Gas Rate = 100000
  2. 变量:井 1 油率
  3. 约束:0 <= 井 1 气体率 <= 1000,井 2 气体率 = 2000

这种优化受制于以下关系:

  1. 1 号井的天然气率= 1 号井的石油率 * 5
  2. 总瓦斯率= 井 1 瓦斯率 + 井 2 瓦斯率

是否可以使用 Solver Foundation 解决这样的问题?在尝试实现这一点时,我遇到的两件事是:

  1. Solver Foundation 模型似乎只有两个 GoalKind:最小值和最大值。就我而言,我正在尝试针对特定值进行优化。有没有办法做到这一点?
  2. 如何定义上述关系?我认为后者将被定义为目标定义的一部分(例如,model.AddGoal("total_gas_rate", GoalKind.[not sure what goes here], Well1PGasRate + Well2PGasRate),但是我如何定义另一个呢?

谢谢!

4

1 回答 1

0

该答案仅以概念方式解决了您问题的第 1 部分,但希望对您有所帮助。如果您尝试针对特定值进行优化target并且函数的输出是,output那么您可以尝试以下伪代码:

minimize(absolute_value(output/target-1))

实际上,这将为您提供一个在函数输出接近目标值时达到零的值。所以你仍然可以使用一个优化引擎来最小化你的函数的最终输出。

于 2015-07-15T04:49:47.223 回答