我有以下等式:
y(t) = x(t) and not x(t-1)
x, y are boolean variables
t is discrete time
这是一个边缘检测器。我进一步知道
y(0) = 0
y(1) = 0
y(2) = 1
y(3) = 0
y(4) = 0
和初始条件
x(0) = 1
x(4) = 0
我想解方程,以便找到令人满意的值x(1), x(2), x(3)
。对于这个例子,我希望解决方案之一是:
x(1) = 0
x(2) = 1
x(3) = 1
我是 Prolog 初学者,但我认为 Prolog 正是可用于解决此类任务的东西。我会将预期的输出和初始条件写成事实:
y(0,0).
y(1,0).
y(2,1).
y(3,0).
y(4,0).
x(0,1).
x(4,0).
和等式 self 作为谓词。如何将方程重写为 Prolog 谓词以及如何查询x
?是否有可能获得所有灵魂解决方案?非常感谢每一个想法!最好的祝愿。
阅读第一个答案后
约束中有一个错误(如果我很好地使用了这个术语)。由 激发的方程(系统)x(t)
将给出特定的y(t)
x(t): 1 0 1 0 0
y(t): X 0 1 0 0
t : 0 1 2 3 4
whereX
表示“我们不知道”,因为x(-1)
需要知道y(0)
计算。
任务是计算x(t)
何时t in 1..4
已知y(t)
。
x(0)
并且x(4)
可以被要求具有或不具有特定值。这只会影响解决方案的数量,但我认为这对任务的本质并不重要。
对于给定的
y(t): X 0 1 0 0
t : 0 1 2 3 4
恕我直言,有两种解决方案:
S1:
x(t): 1 0 1 0 0
y(t): X 0 1 0 0
t : 0 1 2 3 4
S2:
x(t): 1 0 1 1 0
y(t): X 0 1 0 0
t : 0 1 2 3 4
如果没有初始/最终约束x(t)
,至少还有这些解决方案:
S3:
x(t): 1 0 1 1 1
y(t): X 0 1 0 0
t : 0 1 2 3 4
S4:
x(t): 0 0 1 0 0
y(t): X 0 1 0 0
t : 0 1 2 3 4
S5:
x(t): 0 0 1 1 0
y(t): X 0 1 0 0
t : 0 1 2 3 4
S6:
x(t): 0 0 1 1 1
y(t): X 0 1 0 0
t : 0 1 2 3 4
即使对于更长的系列和更复杂的方程,我也想解决这个问题,这个例子非常简化。