jasperzhong / cs-notes

CS认知体系
6 stars 0 forks source link

Google OR-Tools #15

Open jasperzhong opened 3 years ago

jasperzhong commented 3 years ago

https://developers.google.com/optimization

简直就是宝藏!!!

OR-Tools is open source software for combinatorial optimization, which seeks to find the best solution to a problem out of a very large set of possible solutions.

jasperzhong commented 3 years ago

Job-shop Scheduling

就是有一些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有两个

jasperzhong commented 3 years ago

Overview

优化问题的目标是从一个很大的解空间中找到一个最优解. (有时候也许找到一个可行解也够了).

优化问题包括:优化目标和约束.

解决优化问题的第一步就是明确优化目标和约束.

优化问题分类

jasperzhong commented 3 years ago

Constraint Optimization

也叫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+剪枝.