Python 如何对目标函数不明确的优化程序进行编码

Python 如何对目标函数不明确的优化程序进行编码,python,mathematical-optimization,linear-programming,cvxopt,cvxpy,Python,Mathematical Optimization,Linear Programming,Cvxopt,Cvxpy,我尝试使用CVXPY来求解以下形式的线性规划: 10人回答一项调查,询问他们的家庭、年龄、性别和世代。从这些回答中,我写下了许多限制条件和统计数据,如“所有10个人的平均年龄=40”,或“单亲家庭数量=0”。 每个字段(给定的人的年龄、种族等)都表示为一个CVXPY变量。目标是使用这些约束重新生成原始调查响应(假设外部人员看到发布的约束而没有看到调查响应,并希望确定每个人的原始调查响应是什么) 我可以将我的约束编码为CVXPY约束,但是我没有要最大化的目标函数,因为我只有很多约束。是否有一种方法

我尝试使用CVXPY来求解以下形式的线性规划:

10人回答一项调查,询问他们的家庭、年龄、性别和世代。从这些回答中,我写下了许多限制条件和统计数据,如“所有10个人的平均年龄=40”,或“单亲家庭数量=0”。 每个字段(给定的人的年龄、种族等)都表示为一个CVXPY变量。目标是使用这些约束重新生成原始调查响应(假设外部人员看到发布的约束而没有看到调查响应,并希望确定每个人的原始调查响应是什么)

我可以将我的约束编码为CVXPY约束,但是我没有要最大化的目标函数,因为我只有很多约束。是否有一种方法可以对目标函数进行编码,以返回给定变量分配所满足的约束数量,从而在满足所有约束时使目标函数最大化?我无法从CVXPY文档中判断是否有办法做到这一点。或者,是否有另一个开源优化器更适合解决此程序?我已经用SAT解算器解决了这个问题,现在想用非线性优化器来解决

示例数据的格式如下:ID、住户、年龄、性别、种族、世代:

ID是不相关的,只用于帮助我跟踪其他代码中的行号

1801112
21140001
31170102
413011
5190002
62001010
72001010
821010
9240101
10202001

谢谢,,
Christian

您有什么理由想在CVX中这样做吗?此外,您可以提供一些示例数据吗?计算具有二进制变量的模型中的可行约束结果。对Erwin评论的一个小的跟进:您可以轻松地以指标形式修改您的约束:例如,x>=5 x-5>=0=>x-4>=b0,其中b0是一个二进制变量(每个约束一个),并将目标构建为Max(求和(b))。但是:这现在是一个混合整数程序(很难求解),cvxpy中可用的解算器很差(如果您不能使用支持的商业解算器,如Gurobi和Cplex;default=ECOS_BB),CBC除外,它需要一个非常简单的安装步骤。此外,此任务更适合随机优化,其中,您可以提出一些假设:响应x是正态分布,具有未知的平均值+方差)。但这更难(尽管即使是简单的假设也会使结果更好)!关于评论中的指标约束,这里似乎有些混乱。它们的形式为
b0=1=>x>=5
。传统上,这是写为
x>=5-M*(1-b0)
。您有什么理由想在CVX中这样做吗?此外,您可以提供一些示例数据吗?计算具有二进制变量的模型中的可行约束结果。对Erwin评论的一个小的跟进:您可以轻松地以指标形式修改您的约束:例如,x>=5 x-5>=0=>x-4>=b0,其中b0是一个二进制变量(每个约束一个),并将目标构建为Max(求和(b))。但是:这现在是一个混合整数程序(很难求解),cvxpy中可用的解算器很差(如果您不能使用支持的商业解算器,如Gurobi和Cplex;default=ECOS_BB),CBC除外,它需要一个非常简单的安装步骤。此外,此任务更适合随机优化,其中,您可以提出一些假设:响应x是正态分布,具有未知的平均值+方差)。但这更难(尽管即使是简单的假设也会使结果更好)!关于评论中的指标约束,这里似乎有些混乱。它们的形式为
b0=1=>x>=5
。传统上,这被写成
x>=5-M*(1-b0)