首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在or-tools一维数组(python,or-tools )中找到大于0的最小值

如何在or-tools一维数组(python,or-tools )中找到大于0的最小值
EN

Stack Overflow用户
提问于 2021-02-07 11:16:10
回答 1查看 116关注 0票数 1

我有一个or-tools的一维整数数组,这个数组的值是不确定的,我想找出大于0的最小值,比如2, 0,3,5,0,6,8,9我想找出最小值2我该怎么做?

代码语言:javascript
复制
from ortools.sat.python import cp_model
model = cp_model.CpModel()
solver = cp_model.CpSolver()


work={}

for i in range(8):
    work[i]=model.NewIntVar(0, 9, "work(%i)" % (i))

model.Add(work[0]==2)
model.Add(work[1]==0)
model.Add(work[2]==3)
model.Add(work[3]==5)
model.Add(work[4]==0)
model.Add(work[5]==6)
model.Add(work[6]==8)
model.Add(work[7]==9)


min_value = model.NewIntVar(0, 9, "")

#this code only found 0, but did not find the 2 I wanted
model.AddMinEquality(min_value, [work[i] for i in range(8)])

status = solver.Solve(model)
print("status:",status)  

print("min value:",solver.Value(min_value))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-07 14:59:32

你为什么不扫描一下整数列表,记住最小的非负整数。

根据您的描述,对于简单的线性算法,您不需要NP-hard求解器。

如果数组x是一个整数变量数组。如果M是最大值,则创建第二个并行数组y,其域为1..M +1

对于每个变量xi,使用以下代码将其链接到yi:

代码语言:javascript
复制
lit = model.NewBoolVar('')
model.Add(xi > 0).OnlyEnforceIf(lit)
model.Add(xi == 0).OnlyEnforceIf(lit.Not())
model.Add(yi == xi).OnlyEnforceIf(lit)
model.Add(yi == M + 1).OnlyEnforceIf(lit.Not())

那么你想要的是y数组的最小值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66084217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档