← 最新论文
🤖 AI

FLINGO -- Instilling ASP Expressiveness into Linear Integer Constraints

本文介绍了 FLINGO,这是一种语言和工具,通过将默认值、未定义属性、非确定性赋值和聚合等关键 ASP 特性融入线性整数约束,并辅以面向标准 CASP 求解器的翻译机制,从而增强约束答案集编程(CASP)。

原作者: Jorge Fandinno, Pedro Cabalar, Philipp Wanko, Torsten Schaub

发布于 2026-05-26
📖 1 分钟阅读☕ 轻松阅读

原作者: Jorge Fandinno, Pedro Cabalar, Philipp Wanko, Torsten Schaub

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

想象一下,你正在尝试解决一个复杂的谜题,比如策划一场盛大的派对或设计一辆定制自行车。你需要同时处理两类信息:

  1. “是/否”事实:“袋子包含在内吗?”“钢铁关税是否生效?”“客人会来吗?”
  2. “数字”事实:“袋子多少钱?”“确切的税率是多少?”“有多少位客人?”

长期以来,用于解决这类谜题的计算机程序(称为答案集编程或 ASP)在“是/否”部分表现出色,但在“数字”部分却表现糟糕。它们必须在开始求解之前,猜测每一个可能的数字(例如,“价格是 1?2?3?……1,000,000?”)。这就像试图通过逐一检查每一根干草来寻找 haystack 中的针——对于大型问题而言,这种方法既缓慢又往往不可行。

为了解决这个问题,专家们创建了CASP(约束 ASP),将数值计算交给专门的“数学引擎”(约束求解器)处理。这大大加快了速度。然而,这里有一个陷阱:数学引擎非常僵化。它不理解主谜题求解器所喜爱的灵活、"what-if"(假设性)逻辑。

问题:僵化的数学引擎

在旧方法中,如果你想表达“默认税率是 15%,除非是钢铁,否则是 25%",数学引擎就会感到困惑。

  • “默认”问题:在普通逻辑中,你可以说“假设税率是 15%,除非我们另有了解”。但数学引擎通常要求你立即提供一个具体数字。如果你不提供,它就会崩溃或拒绝工作。
  • “未定义”问题:如果你还不知道某件特定物品的税率怎么办?在普通逻辑中,你可以留空并说“我们稍后再确定”。然而,数学引擎讨厌空白。它强迫你为所有项目分配一个数字,即使你还没有数据。
  • “聚合”问题:如果你想计算 1,000 件物品的税额,普通逻辑可以轻松地将它们相加。但一旦将数字交给数学引擎,就很难告诉它“把所有税额加起来,但忽略那些尚未定义的项目”。

解决方案:flingo

本文作者介绍了一种名为flingo的新工具。可以将flingo想象成一位通用翻译官智能适配器

它位于你灵活的谜题逻辑与僵化的数学引擎之间。它允许你使用习惯的自然、灵活风格(包含默认值、空白和“假设”选择)来编写规则,然后悄悄地将这些规则翻译成数学引擎能理解的语言。

以下是flingo如何解决三大主要难题:

1. “未定义”的空白画布

flingo中,你可以像留空“是/否”问题一样,留空一个数字(未定义)。

  • 类比:想象一张购物清单,有些物品有价格,有些是空白的。在旧系统中,收银员会拒绝为你结账,直到你填好每一个价格。而在flingo中,收银员会说:“没问题,我会计算我们已知物品的总额,其余的稍后再确定。”
  • 工作原理flingo引入了“严格”与“非严格”求和的概念。
    • 严格求和:“如果任何物品缺少价格,整个计算就会失败。”(用于检查数据是否完整)。
    • 非严格求和:“如果某个物品缺少价格,就忽略它,只加总其余部分。”(用于在数据缺失的情况下获取总额)。

2. “默认”安全网

flingo允许你设置一个“默认”数字,仅在没有特定规则覆盖时才适用。

  • 类比:想象一个恒温器。你将“默认”温度设定为 70°F。如果你不触碰它,它就保持在 70。但如果你明确说“设定为 65",它就会改变。旧的数学引擎不理解“默认”;它只看到一个没有值的变量。flingo教会了引擎如何处理这些“除非”规则。

3. “选择”与“聚合”魔法

flingo允许你表达诸如“从范围内选择一个价格,但仅当该物品被选中时”,然后“将所有选中的价格相加”。

  • 类比:想象组装一辆自行车。你可以选择是否带袋子。如果选择袋子,它就有价格;如果不选,它就没有价格。flingo可以通过仅当选择了袋子时才将车架和袋子的价格相加,来计算自行车的总成本。它在进行数学计算的同时,无缝处理了“如果/那么”逻辑。

内部工作原理

论文解释说,flingo并没有取代数学引擎;它只是更擅长说它的语言。

  1. 翻译:当你编写一个flingo程序时,系统会将你的灵活规则翻译成数学引擎(称为 clingcon)能理解的格式。
  2. “发现”规则:一项关键创新是,在flingo中,一个数字只有在有规则证明它应该拥有该值时,才会被赋予一个值。如果没有规则说“税率是 25%",那么税率将保持“未定义”,而不是被强制赋予一个随机数字。这防止了系统编造事实。

论文中的现实世界示例

作者在自行车配置问题上测试了flingo

  • 你有一个车架(固定价格)。
  • 可能有一个袋子(可选)。
  • 如果你选择了袋子,它就有价格;如果不选,就没有价格。
  • flingo计算总价格。如果袋子缺失,它只加总车架;如果袋子存在,它就加总两者。它自然地处理了“缺失”的袋子,而不会崩溃或强制一个虚假价格。

他们还在关税计算(商品税)上进行了测试。他们表明,flingo可以处理复杂的规则,例如“默认税率是 15%,但钢铁是 25%,如果我们要不知道某个特定国家的税率,就将其视为未定义,并且不计入总额”。

总结

flingo是一种新工具,它将人类逻辑的灵活性(默认值、空白、选择)带入了高速数学求解的世界。它允许计算机解决复杂的数值谜题,而无需强迫它们预先猜测每一个数字,或忽略缺失的信息。它架起了“思考”(逻辑)与“计算”(数学)之间的桥梁,使得建模数据经常不完整或具有条件性的现实世界问题变得更加容易。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →