Open jasperzhong opened 3 years ago
就是有一些jobs, 每个job还有一系列的tasks, 每个task需要到固定的机器上执行, 有一定的执行时间, 一个机器同时只能执行一个task.
举个例子.
job 0有三个tasks. 第一个, (0, 3)表示需要在机器0上执行,执行时间是3. 以此类推.
我们用task(i, j)表示第i个job的第j个任务.
这个问题的variables是 t_{i, j},表示task(i, j)的开始时间.
这个问题的constrains有两个
优化问题的目标是从一个很大的解空间中找到一个最优解. (有时候也许找到一个可行解也够了).
优化问题包括:优化目标和约束.
解决优化问题的第一步就是明确优化目标和约束.
也叫constraint programming (CP)."programming"指的是规划, 而不是编程.
CP是基于可行性(找到一个可行解)而不是优化(找到一个最优解),关注于约束和变量而不是目标函数. 实际上,CP问题可能都不包含目标函数 - 目的可能仅仅是缩小搜索空间的范围.
比如employee scheduling问题就是一个典型例子.
A hospital supervisor needs to create a schedule for four nurses over a three-day period, subject to the following conditions:
- Each day is divided into three 8-hour shifts.
- Every day, each shift is assigned to a single nurse, and no nurse works more than one shift.
- Each nurse is assigned to at least two shifts during the three-day period.
举了一个Cryptarithmetic Puzzles例子确实不错. https://developers.google.com/optimization/cp/cryptarithmetic
在N皇后问题中提到了约束规划的两个重要elements:
所以其实CP就是dfs+剪枝.
https://developers.google.com/optimization
简直就是宝藏!!!