首页 > 解决方案 > 使用 python,我如何优化方程组并获得仅整数的解决方案?

问题描述

我有一个类似于这个的问题,即四个参数的优化:

a+b+c+1750=T

12=a/T*100

15=b/T*100

37=c/T*100

它可以通过转换为矩阵形式然后使用线性代数方法来解决:

a + b + c - T = -1750

100 * a - 12 * T = 0

100 * b - 15 * T = 0

100 * c - 37 * T = 0

import numpy as np

a = np.array([[1., 1., 1., -1.],
          [100., 0, 0, -12.],
          [0, 100., 0, -15.],
          [0, 0, 100., -37.]])
b = np.array([-1750., 0, 0, 0])


res, err, _, __ = np.linalg.lstsq(a, b)
# res: [  583.33333333   729.16666667  1798.61111111  4861.11111111]

我真正的问题需要整数限制的解决方案,即解决方案只能是整数。我是否可以对 np.linalg.lstsq 方法施加限制,或者可能是另一种解决方法,它将返回 a、b 和 c 的纯正整数值?

我想在我的提问中非常慎重:这不是同一个问题

用 numpy 求解整数上的线性系统

由于该问题完全基于整数,即方程和解仅包含整数。现在的问题不同。从一些实验数据中,我得到了十进制值,因为测量是不完美的。所以我的方程式有小数。由于现实中的系统是量化的(来自分子数量),因此解决方案只能是整数。所以有一些最适合数据的整数解决方案。即使问题可以解析解决,但实际上的解决方案只有整数解决方案,因此必须通过一些优化程序进行拟合。

所以我重申这个问题:是否有人知道一种方法来找到方程组的最佳解,其中解只能是零或正整数?

标签: pythonoptimizationintegerlinear-algebraleast-squares

解决方案


推荐阅读