单元测试优化程序-Pyomo



我正在用pyomo实现几个优化程序。

到目前为止,我已经用unittest编写了一些关于最优目标值和最优变量值的集成测试。

我想为每个目标和约束编写单元测试,以确保它们得到正确实现。正确的方法是什么?

这里有几个策略可能很有用,我很好奇其他人是否有其他贡献。

  1. 如果您知道特定场景/数据集的目标值,这是一个很容易的单元测试值+/-一些delta您的解决方案

  2. 如果您有一些应该绑定的约束,则可以组成一组输入以确保它绑定。例如,你有一个玩具模型,它有两个输入:卡车数量和汽油加仑数,目标是根据卡车容量、卡车数量和行程汽油的一些逻辑限制,在卡车中移动一些包裹。你可以:

  • 作为基线,给型号1卡车和足够的汽油进行1次旅行,并
    确保解决方案提供1卡车pkgs

  • 增加一堆额外的卡车,并确保目标保持不变(受天然气限制(

  • 投入0卡车/0汽油,然后确保什么都没发生<--总是好主意!:(

  1. 如果您有一个复杂的目标函数,您可以将其分解为表达式,并对这些元素进行检查或断言检查。继续前面的例子,如果你有一个目标,有包裹交付,对旅行的惩罚&你可以
pkgs_delivered = sum(...)
trip_count = sum(...)
gas_used = sum(...)
w_1, w_2 = # some weights for penalties...
mdl.obj = pyo.Objective(expr= pkgs_delivered - w_1 * trip_count - w_2 * gas_used, sense=pyo.maximize)

然后,您可以在单元测试中剥离这些元素(如果有意义的话(,并检查它们的值,因为它们是pyomoexpressions

assertEqual(trip_count.value(), 8, 'this setup should have 8 trips')

最新更新