介绍cplex约束规划建模基础知识

更新时间:2023-06-24 12:18:23 阅读: 评论:0

介绍cplex约束规划建模基础知识
约束规划 opl语⾔
本⽂主要基于ILOG的约束规划(Constraint Programming)模块求解调度问题,因此主要介绍调度相关的函数
依据运筹学建模,主要介绍变量和约束
后续会对docplex的cp模块进⾏介绍,但基本内容都是关于区间变量和关系约束这两块。
Interval Variables
basic interval variables
区间变量表⽰调度中占据⼀段时间的活动或者任务,并且其在调度问题中的时间位置是不确定的,也就是不知道任务是在什么时候开始。区间变量由开始时间和结束时间组成。并且区间变量是可选的,也就是我们设置的区间变量可能在解中出现,也可以不出现。
所以可以应⽤于以下场景:
1. 可选任务:任务未必⼀定全部加⼯
2. 备选资源,但这些资源并⾮全部使⽤,⽽是选择⼀部分
3. 模式选择:任务有多种⼯作模式,但只能选⼀个
千里送鹅毛的故事4. 可选路径:任务的加⼯过程有多个,但只选择⼀条
5. hierarchical description of a project as a work-breakdown structure with tasks decompod
into sub-tasks, part of the project being optional新疆旅游线路
例如区间变量a是⼀个决策变量,其值域可以为空集,也可以为[s,e],s表⽰开始时间,e表⽰结束时间,l=s-e,表⽰其长度
值得注意的是,区间变量有⼀个和长度length相联系的属性size,size是⼩于等于length的。
如果区间变量a为空集,其相当于不存在,即便应⽤在后⾯的noOverlap函数或者次序约束上,都相当于没有作⽤
# 区间变量a表⽰值域为默认的,也就是l不确定,但s和e必须为⾮负数,此时的size和length相等
dvar interval a;
# b则表⽰其区间长度在【0,10】的范围内
dvar interval b size 0..10;
# c表⽰区间变量为可选,并且长度为10,可以从-1000开始到1000
dvar interval c optional in -1000..1000 size 10;
⽐如有100个任务,每个⼯序都有⼀个加⼯时间time,那么这些⼯序应该设置为
dvar interval task[i in Tasks] optional in 0..100 size time[i];
Tasks表⽰所有的任务都只能在0到100内进⾏,time表⽰所有任务的加⼯时间,也就是size。
option表⽰任务是可选的,也就是可以任务不是必然存在。
Intensity,size and forbidden values
这部分主要是介绍随着时间的变化,可以对区间变量的length进⾏变化,例如变⼤或缩⼩,主要是通过设置函数,我没有⽤过,因此不再介绍。
logic constraint
这⾥表⽰的是逻辑约束,也就是if条件的问题,具体可以看下⾯两个
prenceOf()函数表⽰的是如果区间变量存在则返回1,否则返回0
# 表⽰如果a是数,则b⼀定是实数
prenceOf(a) => prenceOf(b)
# a,b同时为prent或者同时为abnt
prenceOf(a) == prenceOf(b)
Temporal constraints
白鸽飞过的地方这⾥主要说的是区间变量之间的关系,⽐如任务a和任务b之间的开始和结束时间的关系
1. startOf(a) 任务a开始的时间
2. endOf(b) 任务a结束的时间
品德故事3. endBeforeEnd(a,b) 任务a结束的时间⼤于任务b结束的时间
可以开始开始,结束结束,开始结束,结束开始等关系
# a的完⼯时间必须在b开始之间的z个单位
endBeforeStart(a,b,z)
# 其中z可以为负值,表⽰推迟到b开始之后的z个单位,a才完⼯
# z也可以为固定的值或者决策变量
Constraints on groups of interval variables
单个区间变量和⼀组区间变量之间的关系
span constraint
阅读与欣赏跨越约束
span(a,{bn})
表⽰区间边变量a,如果存在,将分布在区间变量集合B={b1,b2…bn}中。也就是区间变量a和B集合第⼀个存在的元素⼀起开始,和最后⼀个存在的元素⼀起结束
举个例⼦:汽车产品加⼯中有许多⼯序,那这些⼯序有些是存在的,有些可能是冗余的,那汽车可以设置为⼀个区间变量,其基本属性是[start,end]时间,⽽组成汽车产品的⼯序也可以设置为区间变量。
我们如何确认汽车的基本属性呢?
使⽤span约束可以表达,汽车的完⼯时间应该在任务区间变量的范围内。也就是⼀个汽车的区间变量⼀定位于这⼀组⼯序的区间变量中,但是具体的位置不知道,只知道汽车区间变量可以出现在这组⼯序区间变量的任意位置。池沼公鱼
span(汽车,⼀组⼯序),就能够表达
alternative constraint
候选变量,区间变量a是从集合B中任意选择⼀个
alternative(a,{bn},c)
如果a存在,则其将与B集合中选中的某个元素⼀起开始和结束,c则会和a⼀起开始和结束
Interval variables quencing
⼤多数调度任务中都会存在⼀些分离资源(disjunctive resources),其在任何时间点只能完成⼀项任务,典型的例⼦如⼯⼈,机器等。因此设计了⼀个新的决策变量 quence variable,其值是⼀系列区间变量的排列。⽤来表⽰这些区间变量之间的⼀些关系
Sequencing constraint
二八定律举个例⼦:⼀个产品有5个⼯序,⼯序加⼯的先后顺序就是这个约束的含义,形如p=[2,1,3,5,4],任务2和任务1的关系就是
before(p,2,1)在序列p中,任务2在任务1前
# 如果a存在,则其在序列p中的位置为第⼀个
first(p,a)
# 如果a存在,则其在序列p中的位置为最后⼀个
last(p,a)
# 如果a,b都存在,则在p中的位置表现为,a在b的前⾯
before(p,a,b)
# 如果a,b都存在,则在p中,a在b的前⾯,且直接相邻,中间没有其他区间变量
prev(p,a,b)
No-overlap constraint
排序约束并不决定区间变量的开始时间和结束时间,其只是确定相对位置,进⾏合理分配。⽆交叉约束表⽰的是,两个任务之间不存在交叉区域,⽐如⼀组区间变量a,其中任务2的开始和结束时间分别是3和5,则任务1的开始和结束时间就不能是3和5。
noOverlap(a)
Same-quence and same-common-subquence constraints
例如有两组排序p1和p2,已经获得了p1内部区间变量之间的关系,可以直接使⽤samequence(p1,p
书香门第的意思2),将这种关系转给p2,具体以后补充。
总结
约束规划中的基础变量是区间变量,基础约束是次序约束和排序约束
只需要明⽩interval variable、quence variable、temporal constraint、quence constraint这四部分的内容,⼀般的调度问题都能构建出来。

本文发布于:2023-06-24 12:18:23,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1052750.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:变量   区间   任务   约束
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图