gecode约束编程库的绑定

gecode-python的Python项目详细描述


对于一个还未到还未到还未到还未到还未到还未到还未到还未到还未到br/>gecode-python-gecode-python-gecode-python-python-gecode-python-python的绑定
==============================================================================================================================br/>*gecode>;=3.6.0


安装
==



有关更简单/可选的安装方法,请参见文件安装。


要全局安装:


或要在主目录中安装:

python setup.py install--前缀$home

将在~/lib/python2.7/site-packages下安装包(如果使用的是2.7版python)。如果在家中安装,还需要调整
环境变量pythonpath以在$HOME/python2.7和
$HOME/python2.7/站点包中搜索。

您需要调整环境变量cxxflags、ldflags和
ld_library_path。


文档
==


gecode包中有许多常量。可能最容易导入所有内容:


from gecode import*


intset
~~~~~

intset(int,int)
intset(spec)
返回相应域的intset。spec是一个int和
对int(interval)的列表。简单地将一个
intset表示为一个规范列表可能很有诱惑力,但对于intargs来说,这一点可能会不明确,这里是
,表示为int的列表。

space
~~~~~


space()
此函数创建一个空间。


variables
~~~~~~~


与gecode不同,变量对象不绑定到特定空间。每个
实际上都包含一个索引,可以使用该索引访问空间限制
gecode变量。可以使用
空间的以下方法创建变量:

space.intvar(int,int)
space.intvar(intset)
返回用相应域初始化的intvar。


space.boolvar()
返回用域初始化的boolvar[0,1]

空格.setvar(int glb min,int glb max,int lubmin,int lubmax,int cardmin=min,int cardmax=max)
空格.setvar(int glbmin,int glbmax,int set lub,int cardmin=min,int cardmax=max)
空格.setvar(int glb,int lubmin,int lubmax,int cardmin=min,int cardmax=max)
space.setvar(intset glb,intset lub,int cardmin=min,int cardmax=max)
返回用相应域初始化的setvar。

space.intvars(int n,…)
space.boolvars(int n)
space.setvars(int n,…)
返回一个由n个变量组成的列表,这些变量由
剩余的参数"…"

也就是说,您可以使用它们来
在原始空间中发布约束,并在
解决方案中查询它们的值。以下是用于查找变量信息的空间方法。
这些方法中的每一个都可以将变量作为参数,或将变量的列表(或
元组)作为参数,并返回resp。值或值列表:

space.assigned(x)
如果在空间中指定(确定)变量x,则返回true,False
否则。


space.min(x)
space.max(x)
space.med(x)
space.val(x)
space.size(x)
space.width(x)
space.遗憾最小(x)
space.遗憾最大(x)
这些可用于intvars和boolvar,含义与中的相同gecode.

space.ranges(intvar)
space.values(intvar)
返回resp。表示参数变量
域的对列表和整数列表。
space.values(boolvar)
与boolean相同变量。

space.glbsize(setvar)
space.lubsize(setvar)
space.unknownsize(setvar)
space.cardmin(setvar)
space.cardmax(setvar)
space.lubmin(setvar)
space.lubmax(setvar)
space.glbmin(setvar)
space.glbmax(setvar)
这些值可用于setvars,其含义与gecode中的相同。


space.glbranges(setvar)
space.lubranges(setvar)
space.unknownranges(setvar)
这些返回表示相应集合的整数对列表
边界。

space.glbvalues(set var)
space.lubvalues(setvar)
space.unknownvalues(setvar)
这些返回的int列表表示相应的集合边界。


space.keep(var)
space.keep(vars)
变量可以标记为"keep"。在这种情况下,只有这样的变量
将在搜索期间显式复制。这可以在内存使用方面带来实质性的好处。当然,在一个解决方案中,您只能查看已"保留"的变量。如果没有变量标记为
"keep",则它们都会被保留。因此,将变量标记为"keep"纯粹是一种优化。


space.status()
返回空间的状态
space.choice()
返回一个choice对象
space.commit(choice c,int a)
将空间提交给可选对象c中的可选a
空间。constrain(space sol)
将空间约束为优于sol解决方案sol

choice
~对象

search
~~~~


space.search(restart=false,threads=none,c_d=none,a_d=none,
statistics=none,memory_d limit=-1,node_d limit=-1,fail_d limit=-1,
time_d limit=-1)
返回解决方案的迭代器。每个解决方案都是一个空间。
重新启动选项选择重新启动搜索引擎,但前提是已指定
优化标准。threads选项选择
,并控制搜索引擎的并行变量。c_d和a_d
选项控制重新计算。


如果提供,统计信息应该是一个对象,其属性(propagate,
wmp,fail,node,depth,memory)在每次迭代后(即每次隐式调用next以搜索next之后)都会累积更新。解决方案)。

如果提供了一个或多个限制参数,则会创建适当的stop
对象,并由基础搜索引擎用于在超过任何给定限制时停止搜索。

有必要指出需要优化的内容:


空间。最小化(intvar x)
空间。最大化(intvar x)
搜索解决方案最小化(resp)。最大化)x.
空间。最小化(intvar x,intvar y)
空间。最大化(intvar x,intvar y)
搜索解决方案最小化(resp.最大化)x/y比率。

~~~~


space.gist(onclick=none,threads=none,c_d=none,a_d=none)
如果您的gecode安装有gist支持,则这将调用它。
onclick是一个检查器或检查器的iterable。inspector是一个可调用的类,或者一个实例是可调用的类,它已经/已经被装饰器特别地注释了:


@inspector("我的inspector 1")
def show1(s2):
打印s2.values([x1,x2])

注意s2不一定是一个解决方案!您还可以定义
textInspector以在图形窗口中显示文本输出:

@textInspector("我的Inspector 2")
def show2(s2):
return"x1=%s x2=%s"%s2.values([x1,x2])

textInspector必须返回一个字符串。


绑定变量
~~~~~~~~~~~~~~~


>绑定变量本质上是一对非绑定变量和一个空间。

intval.\uu call庘(space)
boolvar.\uu call庘(space)
setvar.\uu call庘(space)
绑定变量可以通过将非绑定变量应用于
空间来创建。

ound变量。

constants
~~~~~~~~~~


gecode中使用的所有常量在这些
绑定中都具有相同的名称。

constraints
~~~~~~~~~~~

在gecode中,所有约束都以空格作为第一个参数。在这些绑定中,
所有约束都是空间方法。gecode在任何地方都会使用xxxargs
参数,这里,您只需使用xxx的列表(或元组)。所有的gecode
约束都是可用的(除了"extensional",它还没有实现)。除了那些参数
需要在c++中额外实现的分支之外,所有分支都可用。请参阅gecode
文档。

完全具体化是C<;->;B;半具体化是C->;B(分别C<;-B)。如果以前提供了b,boolvar,现在也接受了具体化规范:

reify(b,rm_eqv)用于完全具体化(c<;->;b)
reify(b,rm_imp)用于半具体化(c->;b)
reify(b,rm_pmi)用于半具体化(c<;-b)

disjunctors
~~~~~~~~~~~~~


disjunctors是由
gecode python绑定实现的gecode的实验扩展。它们支持子句的析取,
其中每个子句是约束的连接:

c1或c2或…或者cn

每个子句都是"推测性"执行的:这意味着它不影响main
空间。当子句失败时,它将被丢弃。当只剩下一个子句
时,它被提交:这意味着它现在影响主空间。

示例:



首先,我们必须创建一个disjunctor作为两个子句的管理器:


我们现在可以创建第一个子句:


但是,由于它必须以"推测"方式执行,因此它必须对新变量x1和y1进行操作,这些变量的阴影x和y:


x1,y1=c1.intvars(2,0,3)
c1.forward([x,y],[x1,y1])

forward(…)规定指示哪个全局变量被
哪个子句局部变量隐藏。现在我们可以发布x=y=0的推测子句local

c1.rel(y1,irt_eq,0),


3)
c2.forward([x,y],[x2,y2])


但是,该子句还需要一个子句局部变量z2,取值1或
2,以便过帐子句局部约束x2=y2+z2:

z2=c2.intvar(1,2)
c2.线性([-1,1,1],[x2,y2,z2],irt_eq,0)

我们可以进行分支和搜索:

s.branch([x,y],int-var-size-min,int-val-min)
s.search()中的sol:
打印sol.val([x,y])


gecode.fsa
~~~~~~~~~~~

此模块支持构建用于扩展约束的有限状态自动机。它导出类fsa以显式地创建任意有限状态自动机(参见帮助(gecode.fsa)),以及使用正则表达式创建自动机的对象re。


>正则表达式:

re(x)正则表达式匹配整数x
re(x,y)正则表达式匹配[x,y]
r1>>中的整数;r2顺序合成
r1 r2并行合成(析取)
r.opt匹配可选的r
r.star匹配r 0或更多次
r.plus匹配r1或更多次
r.repeat(n)匹配r至少n次
r.repeat(n,m)匹配r至少n次,最多m次

~~~~~~~~~~~~~

此模块支持使用
整数对值的有限域进行编码。它导出类域。

domain([v0,…,vn])

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java线程;创建一个单独的线程来定期执行某些操作   用java将SonarQube升级到5.2失败。util。同时发生的CancellationException:空   在线程对象上调用start时,线程上设置的java优先级无效   java如何在不使用reduce()或last()折叠的情况下获取通量的最后一项   java如何从ArrayList中获取元素?   应用了逻辑的JavaTwitterAPI   在这种情况下,怎样才能不让自己重复?安卓的java   JavaAndroid:线程可运行和处理程序。在run方法中发布问题(Handler.postXX在预期情况下不会按时运行)   java log4j grok与管道故障   使用循环返回命令选项时出现问题/仅运行一个命令(JAVA)   java双重比较问题   使用vertx的JWT公钥/私钥身份验证中的java握手   用Java将WMA和AAC音频转换为MP3   解析字符串java get index   与具有不同数据类型的密钥同名的java JSON