我试图使用docplex为最长路径问题创建成本函数。作为公式的一部分,我想对模型中包含的变量和使用单位步长函数。下面是我的代码:
top_sort = list(range(0,5)) # topological sort of nodes
mdl = Model(name='lpp')
x = {i: mdl.binary_var(name='x_{0}'.format(i)) for i in top_sort}
H = mdl.piecewise(0, [(0, 0), (0, 1)], 0)
H(mdl.sum(x[k] for k in top_sort))
但是,每次运行此代码时,都会出现以下错误:
The type of Variable x6 is continuous. It must be a binary variable.
The type of Variable _pwl6 is continuous. It must be a binary variable.
Traceback (most recent call last):
File "vqe.py", line 57, in <module>
qubitOp, offset = longest_path.get_operator(G)
File "C:\Users\vasnt\Documents\EDI2020\HONOURS\lpp\longest_path.py", line 109, in get_operator
return docplex.get_operator(mdl)
File "C:\Users\vasnt\Anaconda3\envs\qiskit\lib\site-packages\qiskit\optimization\applications\ising\docplex.py", line 90, in get_operator
_validate_input_model(mdl)
File "C:\Users\vasnt\Anaconda3\envs\qiskit\lib\site-packages\qiskit\optimization\applications\ising\docplex.py", line 232, in _validate_input_model
if not constraint.sense == ComparisonType.EQ:
AttributeError: 'PwlConstraint' object has no attribute 'sense'
我甚至试着在一个二进制变量上应用H,它不断地告诉我这个变量是连续的,所以不起作用。你知道会出什么问题吗?谢谢
您得到的异常不是来自docplex内部,而是来自qiskit代码:
我会让qiskit开发者对此发表评论。 在普通docplex上运行代码效果很好:(我只是简化了bianry var dict的定义:docplex将大小转换为raneg,宏从前缀生成名称):
代码是:
输出为:
相关问题 更多 >
编程相关推荐