Algorithm 最大化约束满足中指定变量的数量

Algorithm 最大化约束满足中指定变量的数量,algorithm,language-agnostic,constraint-programming,constraint-satisfaction,Algorithm,Language Agnostic,Constraint Programming,Constraint Satisfaction,在约束满足问题中(如果不存在满意的分配),有哪些已知算法(或查找算法的资源)可以找到使分配变量数量最大化的分配?对于线性方程组,可以使用线性代数查找自由度的数量,因此,可分配自变量的数量 编辑: 仔细考虑一下你的问题,我想这可能会对你有所帮助。它是一种寻找线性优化问题最佳整数解的优化算法 编辑2: 将可行区域设为供应仓库 例如: 假设你有两种仓库类型,X和Y X需要提供5种油和7种钢 Y需要提供8种油和2种钢 您希望最大化提供的仓库数量: 最大化函数=X+Y 条件: X您是否希望最大化满足的约束

在约束满足问题中(如果不存在满意的分配),有哪些已知算法(或查找算法的资源)可以找到使分配变量数量最大化的分配?

对于线性方程组,可以使用线性代数查找自由度的数量,因此,可分配自变量的数量

编辑:

仔细考虑一下你的问题,我想这可能会对你有所帮助。它是一种寻找线性优化问题最佳整数解的优化算法

编辑2:

将可行区域设为供应仓库

例如:

假设你有两种仓库类型,X和Y

X需要提供5种油和7种钢

Y需要提供8种油和2种钢

您希望最大化提供的仓库数量:

最大化函数=X+Y

条件:


X您是否希望最大化满足的约束数量,而不是指定的变量?我考虑了最大化分配的变量数量可能会带来什么好处(直到您发现至少有一个约束被违反为止),在我看来,您希望沿着可满足的约束的最大子集来做一些事情。否则我可能不理解你的优化标准

如果您想要这个可满足约束的最大子集,一个想法是将您的问题转换为约束优化问题,找到使违反约束数量最小化的分配,然后选择此分配满足的所有约束,以构造可满足约束的最大子集

下面我将使用加权约束满足问题(WCSP)的框架

如果将约束表示为允许或不允许的部分分配表,则可以通过简单地分配允许的分配成本0和不允许的分配成本1来转换约束。也就是说,只要约束不允许变量赋值,就会产生成本。使成本最小化的分配因此使其违反的约束数量最小化,这相当于使满足的约束数量最大化。一旦有了这样一个赋值,通过迭代所有约束并检查赋值是否满足它们,就可以很容易地构造出可满足约束的最大子集。WCSP的一个好解算器是,它计算给定WCSP的此类最低成本分配

从约束满足问题(CSP)构造WCSP非常简单,因为您确实将约束表示为表。加权约束只是表单的表

X_1 X_2 … X_n   c

1    1 …   1    0 

1    2 …   1    0 

... 

2    2 …   3    1

2    2 …   4    1
这里我们对n个变量X_1,…,X_n有一个约束,其中变量可以接受来自有限域{1,2}和{1,2,3,4}的值。假设您将允许的元组标记为“T”,将不允许的元组标记为“F”,则转换金额等于将“T”替换为成本0,将“F”替换为成本1

请注意,这不是实际的WCSP格式。该格式在上面链接的toulbar2包中有详细描述


当然,约束的更紧凑表示将需要更精细的转换,这可能会根据您的表示变得任意复杂。这就是你可能想要研究其他东西的地方。

你需要缩小你的范围。你说的是什么类型的约束?线性?是的,约束是线性的。酷,那么你应该看看单纯形算法。不,我不是在试图最大化满足约束的数量。我试图解决一个资源分配问题,使资源与实体匹配,目标是最大化已分配所需资源数量的实体数量。单纯形算法适用于最大化受约束目标的线性规划问题。根据维基百科,如果不存在可行区域,单纯形法第一阶段的可能结果要么是找到基本可行解,要么是可行区域为空。我在寻找一个约束满足问题中的最大可行部分分配,如果没有可行的完全分配。simplex会怎么给我这个答案?我已经添加了一个例子来说明我是如何思考的。如果我误解了你的问题,请进一步澄清你的问题。