当前位置: 首页 > 知识库问答 >
问题:

如何使用混合数据类型执行约束求解?

卫念
2023-03-14

我正在为Java 6开发源代码到源代码转换器*1)

我需要保持负面信息和正面信息,所以我必须为变压器实现小约束系统。约束系统是受限制的CNF公式,可以定义为以下内容:

(v1==c1/\v2==c2…vn==cn)/\((w1,1!=d1,1\/w1,2!==d1,2…w1,k!=d1,k)/\(w2,1!=d2,1\/…)/\。。。(wm,1!=dm,1\/…\/wm,k!=dm,k))

其中,vi==ci是等式约束(替换、变量赋值),

wj!=dj、l是质量限制,

vi、wj、l都是变量,

ci、dj、l是常量(文字)。

常量类型是映射到整数的Java基元类型和引用类型。常量也是任意的类似AST的结构(表示部分计算的表达式,可能包含(元)变量)。

约束系统的工作原理如下:

当变压器达到一个条件(例如,if(x==c),那么b else b1)时,约束x==c被添加到then分支的约束系统中,约束x!=c,依次添加到else分支的约束系统(公式)中。

因此,该分支的新公式是:x==c/\公式(公式的正部分是等式的结合);

else分支的新公式是:x!=c\/formula(公式的负部分是分离的析取的连词)。

编辑:约束系统的可满足性。

为了使约束系统可满足,必须能够为系统中的变量赋值,以使约束得到满足。

因此,当存在取代基θ时,约束系统得到满足,对于每个等式v=cθv在语法上与θc相同,同样地,对于每个不等式w!=dThetaw在语法上与Thetad不同。

不幸的是,我对约束编程非常陌生,遇到了一些问题。

>

目前尚不清楚如何处理长型。重写基于int的解算器,使其基于long还是使用浮点解算器?

目前还不清楚如何处理组合整数和浮点数据。正如我意识到的,简单的解决方案是对整数和浮点约束使用浮点解算器。这是真的吗?或者我可以分别解决浮点和整数部分的约束?

拜托,有人能帮我吗?一些指示,提示。。。

1)目前,source=8/target=8方案被接受。


共有1个答案

燕玉堂
2023-03-14

如果你也发布你的最终目标(解决的约束实际上意味着什么),那就好了。

然而,在我看来,你想知道给定语句中每个变量的可能值集。在这种情况下,你需要一个区间约束求解器

整数和有理区间之间的区别取决于您的用例和您选择的解算器,但通常可以将整数作为浮点处理(这可能会导致约束的非整数解)。

重要的是要记住,您将无法证明任意AST片段的相等性。因此,您需要降低所述片段的表达能力(例如,给定顺序变量上的多项式)或近似相等(例如,引用相同(即相同上下文、相同语法、无副作用)AST片段。然而,最好只是将AST片段转换为未绑定(或悲观绑定)的间隔。

 类似资料:
  • 当参数类型可以混合时,如何使用JSDoc在JavaScript中记录方法? 我有一个对话框对象的方法,我可以显示HTML或我自己的可视对象。JSDoc方法如下所示: 因为JS不允许方法重载,所以我需要创建这些类型的方法,其中方法中的参数可以是两种不同的类型。有没有办法在JSDoc中记录这一点,或者JSDoc只能让你记录一种类型的参数? 另外,您将如何记录类型的参数?也就是说,传入的对象不是类型。准

  • 我们有一个DynamoDb表,其中一个列名“createdAt”有时创建为S(String)数据类型,有时创建为N(Number)数据类型。 在我的代码中,如果我定义为String,当我想获取数据时它会失败,它是数字: 如果我定义为Number,当我想获取数据并且它是表中的字符串时失败: 你们有没有人以前也有过同样的问题?应该有办法解决它对吗?并且不能只选择一种数据类型:(

  • 问题 你想定义某些在属性赋值上面有限制的数据结构。 解决方案 在这个问题中,你需要在对某些实例属性赋值时进行检查。 所以你要自定义属性赋值函数,这种情况下最好使用描述器。 下面的代码使用描述器实现了一个系统类型和赋值验证框架: # Base class. Uses a descriptor to set a value class Descriptor: def __init__(self

  • 实现SortedSet的Java类除了提供一些其他方法外,还应该提供一个迭代器,以升序迭代其元素。但我认为SortedSet接口规范无法强制执行它指定的这种行为约束。SortedSet只有几个方法,一个实现类可以实现这些方法,而实际上不必满足返回升序迭代器的要求,或者确实不需要有一个有效的比较器。 仅仅查看接口方法而不知道其名称,并不能告诉开发人员实现类应该实现的核心行为。 实现开发人员应该阅读J

  • 销关节 cpPinJoint *cpPinJointAlloc(void) cpPinJoint *cpPinJointInit(cpPinJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2) cpConstraint *cpPinJointNew(cpBody *a, cpBody *b, cpVect anchr1,

  • 我有一个由第三方供应商提供的XSD文件。我需要解析该XSD文件并生成Java对象。我使用JAXB通过maven插件解析XSD文件。 一切都很顺利,直到我最近要求使用来自正在解析的XML中的一个标记的数据。标记的complexType具有mixed=true,因此JAXB生成的java类如下所示。 XSD复杂类型: 生成的JAXB类 GeneralRemark>类不包含List ,而是包含List