【发布时间】:2021-10-03 01:34:09
【问题描述】:
我想看看是否有人可以帮助我解决优化排放模型的问题,从根本上改变输入条件以匹配测量的输出。
问题如下。我有以下模型数据:
| Treatment group | # of animals | Treatment efficiency | Model emissions |
|---|---|---|---|
| Control | 110 | 1 | 110 |
| A | 88 | 0.5 | 44 |
| B | 22 | 0.25 | 5.5 |
该模型预测了一个谷仓的排放量,其中有一定数量的动物。在这种情况下,有 220 只动物,预测的总排放量为 159.5 个单位。每只动物排放 1 个单位的排放物,除非所应用的处理方法将排放量减少了一定比例,如 A 组和 B 组的处理效率所示。
但是,实验测量显示,总排放量在 173.0 时高出 13.5
从已知信息可以确认,动物数量肯定是220只,治疗效率是毋庸置疑的。因此,唯一可以解释这一点的变量是动物没有像在模型中那样被分配到治疗组。如果更多的动物属于对照组,而较少的动物属于治疗组 A 和 B,则排放量会上升,并可以接近正确的测量值。
我不是很精通数学,而且我经常遇到这样的事情,最终得到更简单的解决方案。但是我的原始模型是在 Excel 中的,我认为没有办法用简单的公式来做到这一点。对我来说,这感觉像是一个优化问题。例如,如果我将 13.5 的排放量添加到对照组,使控制组的总排放量为 123.5,总排放量为正确的 173.0,那么对照组中的动物数量必须变为 123.5,以确保控制组的排放量每只动物最多返回 1 组。我们只能通过移动 A 组和 B 组的动物才能到达那里。
我在动物必须根据治疗效率按比例移动的限制下这样做了一次。这会在 1 次迭代后生成下表,从 A 组和 2.7 组中移动 10.8 只动物(假设我们暂时可以拆分动物):
| Treatment group | # of animals | Treatment efficiency | Model emissions | Emission per animal |
|---|---|---|---|---|
| Control | 123.5 | 1 | 123.5 | 1 |
| A | 77.2 | 0.5 | 38.6 | 0.56 |
| B | 19.3 | 0.25 | 3.825 | 0.28 |
现在,在动物数量相同的情况下,总排放量为 166.9。更接近观测值 173.0。我可以继续这样做,并假设会接近动物的正确分布。
请注意,我的现实生活问题比这更大,最多有 5 个治疗组,我必须针对大约 120 种不同的动物设置和治疗效率重复此操作。因此,我想自动化它以找到一种方法来优化它以适应动物的新的正确分布。我认为这可以通过添加约束来完成:
约束 #1:治疗组中的动物数量只能按比例变化。
我假设没有这个约束,有无限数量的解决方案。
约束 #2:如果观察到的排放量高于模拟排放量,则对照组中的动物数量不能减少。
我认为即使使用约束 #1 也不可能发生这种情况,所以这个约束可能是多余的,但在我的现实生活问题中就是这种情况,所以我还是添加了它。在我的问题中,观察到的排放量不低于模拟的排放量。
我在其中添加了 R 和 python,因为这些是我知道的编程语言,虽然我以前没有像这样使用它来解决优化问题,所以我真的不知道从哪里开始。谁能指点一下?
【问题讨论】:
-
您不考虑治疗效率可能是平均水平的事实吗?并且这个平均值附近有一个随机波动可以解释你的 13.5 吗?如果你正在修改你的数据以获得你想要的东西,你还在做科学工作吗?
-
所以我以这样一种方式来构建这个问题,以简化并使其与其他问题相似,但现实世界的问题有 1000 只动物,以及 120 多个这些案例的数据集,它们是都是理论上的。基本上我知道所有组的总排放量和某些组的一些具体观察结果(低于模型)。那么,这是为了协调未观察到的群体,但我现在知道平均排放量必须更高(因此我添加了这个 13.5)。所以这更像是一种校准练习,因为这里动物的原始分布也是一个假设。
-
好吧,我让认识论的问题,这取决于你。对于优化,您需要定义一个要优化的标准,在您的情况下,观察到的排放量与理论排放量之间的差异..所以如果您想最小化这种差异,您只需要编写一个接受参数的函数组内动物的分布,以及观察到的排放量,以及计算差异。然后使用例如 GenSA 包进行优化..
标签: python r math optimization model