首页 > 其他分享 >以简单组合优化为例讨论计算复杂性

以简单组合优化为例讨论计算复杂性

时间:2024-10-20 14:00:45浏览次数:6  
标签:背包 为例 max 复杂性 问题 任务 时间 NP 优化

此为课题组所指导本科生和低年级硕士生学习组合优化问题汇报
所用教材:北京大学屈婉玲教授《算法设计与分析》
课程资料:https://www.icourse163.org/course/PKU-1002525003
承诺不用于任何商业用途,仅用于学术交流和分享

1. 简单TSP(1.4)

  • 问题描述:有\(n\)个城市, 已知任两个城市之间的距离. 求一条每个城市恰好经过 1 次的回路,使得总长度最小.
  • 实例:
    问题实例
  • 输入:有穷个城市的集合\(C=\left\{c_1, c_2, \ldots, c_n\right\}\), 距离\(d\left(c_i, c_j\right)=d\left(c_j, c_i\right) \in \mathbf{Z}^{+}, \quad 1 \leq i<j \leq n\)
  • 解:\(1,2 \ldots, n\)的排列\(k_1, k_2, \ldots, k_n\)使得:

\[\min \left\{\sum_{i=1}^{n-1} d\left(c_{k_i}, c_{k_{i+1}}\right)+d\left(c_{k_n}, c_{k_1}\right)\right\} \]

  • 现状:至今没找到有效的算法

2. 背包问题(knapsack Problem)(5.7)

  • 一个旅行者随身携带一个背包. 可以放入背包的物品有\(n\)种, 每种物品的重量和价值分别为\(w_i, v_i\). 如果背包的最大重量限制是\(b\), 每种物品可以放多个. 怎样选择放入背包的物品以使得背包的价值最大?不妨设上述\(w_i, v_i, b\)都是正整数.

建模

  • 解是\(\left\langle x_1, x_2, \ldots, x_n\right\rangle\), 其中\(x_i\)是装入背包的第\(i\)种物品个数
  • 目标函数\(\max \sum_{i=1}^n v_i x_i\)
  • 约束条件\(\sum_{i=1}^n w_i x_i \leq b, x_i \in \mathrm{~N}\)
  • 线性规划问题: 由线性条件约束的线性函数取最大或最小的问题
  • 整数规划问题: 线性规划问题的变量\(\boldsymbol{x}\)都是韭负整数

2.1. 0-1背包(1.4)

*\(0-1\)背包问题: 有\(\boldsymbol{n}\)个件物品要装入背包,第\(i\)件物品的重量\(w_i\), 价值\(v_i, i=1,2, \ldots, n\). 背包最多允许装入的重量为\(\boldsymbol{B}\),问如何选择装入背包的物品, 使得总价值达到最大? (每种物品只能装一件)

  • 实例:n=4, B=6, 物品的重量和价值如下:

\[\begin{array}{|c|c|c|c|c|} \hline \text { 标号 } & \mathbf{1} & \mathbf{2} & \mathbf{3} & \mathbf{4} \\ \hline \text { 重量 } \boldsymbol{w}_{\boldsymbol{i}} & \mathbf{3} & \mathbf{4} & \mathbf{5} & \mathbf{2} \\ \hline \text { 价值 } \boldsymbol{v}_{\boldsymbol{i}} & 7 & 9 & 9 & 2 \\ \hline \end{array} \]

问题建模

  • 问题的解:0-1向量\(<x_1, x_2, \ldots, x_n>\)\(x_i=1 \Leftrightarrow\)物品\(i\)装入背包
  • 目标函数:\(\max \sum_{i=1}^n v_i x_i\)
  • 约束条件:\(\sum_{i=1}^n w_i x_i \leq B\),\(x_i=0,1, i=1,2, \ldots, n\)

2.2. 简单最优装载问题(7.4)

  • 问题描述:\(n\)个集装箱\(1,2, \ldots, n\)装上轮船, 集装箱\(i\)的重量\(w_i\), 轮船装载重量限制为\(C\), 无体积限制. 问如何装使得上船的集装箱最多?不妨设每个箱子的重量\(w_i \leq C\).
  • 问题分析:该问题是\(0-1\)背包问题的子问题. 集装箱相当于物品, 物品重量是\(w_i\), 价值\(v_i\)都等于 1 , 轮船载重限制\(C\)相当于背包重量限制\(\boldsymbol{b}\).

问题建模

  • 设\(< x_1, x_2, \ldots, x_n>\)表示解向量,\(x_i=0,1\),\(x_i=1\)当且仅当第\(i\)个集装箱装上船

  • 目标函数\(\max \sum_{i=1}^n x_i\)

  • 约束条件\(\sum_{i=1}^n w_i x_i \leq C, x_i=0,1 \quad i=1,2, \ldots, n\)

2.3 背包问题分类(5.7)

  • 物品数受限背包: 第\(i\)种物品最多用\(n_i\)个 0 -1背包问题:\(x_i=0,1, i=1,2, \ldots, n\)
  • 多背包问题:\(m\)个背包, 背包\(j\)装入最大重量\(B_j, j=1,2, \ldots, m\). 在满足所有背包重量约束条件下使装入物品价值最大.
  • 二维背包问题: 每件物品有重量\(\boldsymbol{w}_i\)和体积\(\boldsymbol{t}_{\boldsymbol{i}}, \boldsymbol{i}=1,2, \ldots, n\), 背包总重不超过\(\boldsymbol{b}\),体积不超过\(V\), 如何选择物品以得到最大价值。

3. 简单调度问题

3.1 双机调度(1.4)

  • 问题描述:双机调度问题: 有\(n\)项任务, 任务\(i\)的加工时间为\(t_i, t_i \in \mathbf{Z}^{+}, i=1,2, \ldots, n\). 用两台相同的机器加工, 从 0 时刻开始计时, 完成时间是后停止加工机器的停机时间. 问如何把这些任务分配到两台机器上, 使得完成时间达到最小?
  • 实例:假设有任务集合\(\text { 任务集 } S=\{1,2,3,4,5,6\}\), 任务时间:\(t_1=3, t_2=10, t_3=6, t_4=2, t_5=1, t_6=7\)。
  • 实例解:设有一解:机器 1 的任务:\(1,2,4\),机器 2 的任务:\(3,5,6\),则完成时间为:\(\max \{3+10+2,6+1+7\}=15\)

双机调度问题建模

1. 问题描述:

该问题属于经典的双机调度问题(Two-Machine Scheduling Problem),目标是将任务分配给两台机器,使得完成时间(即两台机器中最晚的完成时间)最小。

2. 模型建模:

  1. 决策变量
    定义 0-1 决策变量\(x_i\),其中:

    • \(x_i = 1\)表示任务\(i\)被分配到机器 1;
    • \(x_i = 0\)表示任务\(i\)被分配到机器 2;
    • \(i = 1, 2, \dots, n\),其中\(n\)是任务的数量。
  2. 目标函数
    目标是最小化机器的最大完成时间(Makespan),即:

\[\min \left( \max \left( \sum_{i=1}^{n} x_i t_i, \sum_{i=1}^{n} (1 - x_i) t_i \right) \right) \]

  • \(\sum_{i=1}^{n} x_i t_i\)表示分配给机器 1 的总加工时间;
  • \(\sum_{i=1}^{n} (1 - x_i) t_i\)表示分配给机器 2 的总加工时间;
  • 最大值函数\(\max\)取两台机器中加工时间较大的那个作为目标最小化的值。
  1. 约束条件
    • 每个任务\(i\)都必须分配给一台机器上:
      \(x_i \in \{0, 1\}, \quad i = 1, 2, \dots, n\)
    • 加工时间是整数非负值:
      \(t_i \in \mathbf{Z}^{+}, \quad i = 1, 2, \dots, n\)

当然,也可以不妨设机器 1 的加工时间\(\leq\)机器 2 的加工时间令\(T=t_1+t_2+\ldots+t_n, D=\lfloor T / 2\rfloor\), 机器 1 的加工时间不超过\(D\), 且达到最大.

另一种建模方式

问题描述:

我们有\(n\)项任务,每项任务\(i\)的加工时间为\(t_i\),两台相同的机器开始工作,目的是将任务分配给两台机器,使得满足约束条件的同时完成时间最小。完成时间是后停止加工的机器的停机时间

目标:

根据图片中的约束,目标是最大化机器 1 的加工时间,但其总加工时间不能超过\(D = \left\lfloor \frac{T}{2} \right\rfloor\),其中\(T = t_1 + t_2 + \dots + t_n\)。

模型建模:

  1. 决策变量
    定义 0-1 决策变量\(x_i\):

    • \(x_i = 1\)表示任务\(i\)被分配到机器 1;
    • \(x_i = 0\)表示任务\(i\)被分配到机器 2;
    • 其中\(i = 1, 2, \dots, n\),\(n\)是任务的数量。
  2. 目标函数
    目标是最大化机器 1 的加工时间,但不能超过\(D\):
    \(\max \left( \sum_{i=1}^{n} x_i t_i \right)\)
    满足:

\[ D = \left\lfloor \frac{T}{2} \right\rfloor, \quad T = t_1 + t_2 + \dots + t_n \]

其中\(T\)是所有任务总的加工时间。

  1. 约束条件
    • 约束 1:机器 1 的总加工时间不能超过\(D\):

    \[ \sum_{i=1}^{n} x_i t_i \leq D \]

    • 约束 2:机器 1 和机器 2 共同完成所有任务,总任务时间应为\(T\):

    \[ \sum_{i=1}^{n} x_i t_i + \sum_{i=1}^{n} (1 - x_i) t_i = T \]

    • 决策变量的取值限制:

    \[ x_i \in \{0, 1\}, \quad i = 1, 2, \dots, n \]

总结:

该模型的目标是在机器 1 的加工时间尽量大的前提下,不超过给定的阈值\(D\),剩余的任务则分配到机器 2。通过这个建模方法,任务被合理分配,以实现优化目标。

3.2 最小延迟调度(7.5)

  • 问题描述:客户集合\(A, \forall i \in A, t_i\)为服务时间(即需要为客户i服务的工时),\(d_i\)为要求完成时间(即客户要求的任务完成DDL),\(t_i, d_i\)为正整数. 一个调度\(f: A \rightarrow \mathrm{~N}, f(i)\)为客户\(i\)的开始时间. 求最大延迟达到最小的调度(每个任务的延迟-即为其实际开始时间+工时-约定的DDL。而所有任务中最大的延迟即为这个问题的最大延迟。目标是使这个任务集合的最大延迟最小), 即求\(f\)使得:

\[\begin{aligned} & \min _f\left\{\max _{i \in A}\left\{f(i)+t_i-d_i\right\}\right\} \\ & \forall i, j \in A, i \neq j, f(i)+t_i \leq f(j) \\ & \text { or } f(j)+t_j \leq f(i) \end{aligned} \]

  • 实例:
  1. 按照任务的顺序进行安排,例如:
    顺序安排
  • 在任务顺序\(A = \{1, 2, 3, 4, 5\}\)下,每个任务的执行时间\(T = \langle 5, 8, 4, 10, 3 \rangle\),截止时间\(D = \langle 10, 12, 15, 11, 20 \rangle\)。我们根据以下步骤计算每个任务的完成时间和延迟。

完成时间\(f_1(i)\):

任务\(i\)的完成时间是前面所有任务的累计执行时间:

  • \(f_1(1) = 5\)
  • \(f_1(2) = 5 + 8 = 13\)
  • \(f_1(3) = 13 + 4 = 17\)
  • \(f_1(4) = 17 + 10 = 27\)
  • \(f_1(5) = 27 + 3 = 30\)

延迟\(L(i) = \max\{f_1(i) - D_i, 0\}\):

延迟是完成时间与截止时间的差,如果差为负则延迟为 0。

  • 任务 1:\(L(1) = \max\{5 - 10, 0\} = \max\{-5, 0\} = 0\)
  • 任务 2:\(L(2) = \max\{13 - 12, 0\} = \max\{1, 0\} = 1\)
  • 任务 3:\(L(3) = \max\{17 - 15, 0\} = \max\{2, 0\} = 2\)
  • 任务 4:\(L(4) = \max\{27 - 11, 0\} = \max\{16, 0\} = 16\)
  • 任务 5:\(L(5) = \max\{30 - 20, 0\} = \max\{10, 0\} = 10\)

最大延迟:

所有任务的延迟为\(\{0, 1, 2, 16, 10\}\),其中最大延迟为 16(任务 4)。

更优的调度方法:按截止时间从前到后安排

按截止时间安排

按照截止时间从前到后排序的任务调度

数据:

  • 任务集合:\(A = \{1, 2, 3, 4, 5\}\)
  • 执行时间:\(T = \langle 5, 8, 4, 10, 3 \rangle\)
  • 截止时间:\(D = \langle 10, 12, 15, 11, 20 \rangle\)
  • 排序后任务顺序:\(1, 4, 2, 3, 5\)

完成时间\(f_2(i)\):

  • \(f_2(1) = 5\),\(f_2(2) = 15\),\(f_2(3) = 23\),\(f_2(4) = 27\),\(f_2(5) = 30\)

延迟\(L(i) = \max\{f_2(i) - D_i, 0\}\):

  • \(L(1) = \max\{5 - 10, 0\} = 0\)
  • \(L(4) = \max\{15 - 11, 0\} = 4\)
  • \(L(2) = \max\{23 - 12, 0\} = 11\)
  • \(L(3) = \max\{27 - 15, 0\} = 12\)
  • \(L(5) = \max\{30 - 20, 0\} = 10\)

结果:

  • 各任务延迟:\(\{0, 11, 12, 4, 10\}\)
  • 最大延迟: 12(任务 3)

4. RNA二级结构预测(6.6)

  • RNA的一级结构是由核苷酸(A、C、G、U)组成的线性序列
    *\(A-C-C-G-C-C-U-A-A-G-C-C-G-U-C-C-U-A-A-G-\)
  • 而二级结构描述了这些核苷酸之间的碱基配对形成的二维拓扑结构。这些配对大多数遵循沃森-克里克配对规则(A-U 和 C-G),也可能存在少量其他配对形式(如G-U)。
  • RNA二级结构通常由发夹环、内环、茎和多分支环等结构组成,这些特征在RNA分子功能中起关键作用。

匹配原则

匹配原则

匹配结构

匹配结构

  • 给定RNA的一条链(一级结构), 预测它的可能的稳定的二级结构。
  • 稳定二级结构满足的条件
  • 生物学条件: 具有最小自由能
  • 简化条件:具有最多的匹配对数
  • 问题: 给定RNA链, 求具有最多匹配对数的二级结构, 即最优结构.

NP-hard问题

  • 这样的问题有数千个,大量存在于各个应用领域.
  • 至今没有人能够证明对于这类问题不存在多项式时间的算法.
  • 至今没找到有效算法:现有的算法的运行时间是输入规模的指数或更高阶函数.
  • 从是否存在多项式时间算法的角度看,这些问题彼此是等价的. 这些问题的难度处于可有效计算的边界.

P=NP?

P=NP 问题的解释

背景:

  1. P 类问题:P(Polynomial time)是多项式时间可解问题的集合,代表了那些可以在多项式时间内被求解的决策问题。也就是说,对于给定输入,可以在合理的时间内(即,时间复杂度是输入规模的某个多项式)找到解决方案的所有问题。

    • 例子:排序问题(如快速排序)、图的最短路径问题(如 Dijkstra 算法)等。
  2. NP 类问题:NP(Nondeterministic Polynomial time)是非确定性多项式时间问题的集合,代表了那些解法可以在多项式时间内验证的问题。也就是说,如果我们给出一个候选解,可以在多项式时间内验证这个解是否正确。

    • 例子:旅行商问题、整数分解、数独等问题。对于这些问题,可能我们不知道如何快速找到解,但一旦给出解,验证这个解是否正确是比较快的。

P vs NP 问题:

  • P 表示所有可以在多项式时间内求解的问题。
  • NP 表示所有可以在多项式时间内验证的问题。

P=NP 的含义是:是否所有能够在多项式时间内验证正确解的问题,也能在多项式时间内找到解?

换句话说:

  • P = NP:如果某个问题的解能够快速验证(属于 NP 类问题),那么它也能被快速求解(属于 P 类问题)。
  • P ≠ NP:有些问题虽然解的验证很快(属于 NP 类问题),但找到解的过程非常慢,甚至可能没有有效的多项式时间算法。

为什么这个问题重要?

  • 如果 P = NP,那么很多目前被认为非常困难的问题(如密码学中的整数分解、旅行商问题等)将变得可以高效解决。这将对计算机科学、密码学、经济学等各个领域产生巨大影响。
  • 如果 P ≠ NP,则说明有很多问题虽然解可以快速验证,但无法高效求解,这解释了为什么我们无法找到某些问题的快速解法。

目前的状况:

  • 目前,大多数计算机科学家认为 P ≠ NP,但这一点尚未被证明。因此,P vs NP 问题仍然是一个悬而未决的难题,也是克雷数学研究所的七大千禧年问题之一,如果有人证明了 P = NP 或 P ≠ NP,便可以获得一百万美元的奖励。

举例:

假设你有一个很复杂的密码锁(例如由一组数字组成),这个锁只有一个正确的密码。你不知道如何高效地找到密码(这属于 NP 类问题),但是如果有人告诉你正确的密码,你可以立即检查这个密码是否能打开锁(这是验证问题)。问题是:你能不能既快速验证,又快速找到正确的密码?

标签:背包,为例,max,复杂性,问题,任务,时间,NP,优化
From: https://www.cnblogs.com/cloud-ken/p/18487215

相关文章

  • Python加速运算——"-O优化"和Cython
    1.以release模式运行Pythonpython-Oprocess_file.py可以在代码中加入以下命令,判断是否为release模式:if__debug__:print("Debugmode")else:print("Releasemode")2.使用Cython下载Cython:pipinstallcython编写pyx文件,即要编译的Python代码:为了后面方......
  • 深入优化MySQL深度分页:从第10000页出发,Java模拟高效分页技巧
    在深度分页(如LIMIT99990,10)中,SQL的优化方式主要是为了避免MySQL在执行时需要扫描大量的无用数据,从而提高查询效率。以下是几种常见的SQL层面的优化方法:1.使用覆盖索引优化覆盖索引是一种索引优化技术,即查询只通过索引就可以获得所需的数据,而不需要访问实际的数据......
  • 大健康零售电商AI知识库:优化用户体验的新引擎
    在当今的数字化时代,大健康零售电商行业正以前所未有的速度蓬勃发展。随着消费者对健康产品需求的日益增长,如何提升用户体验,成为了大健康零售电商平台的核心竞争力之一。在这个过程中,AI知识库作为连接产品与消费者的桥梁,正逐渐展现出其在优化用户体验方面的巨大潜力。一、用......
  • 08SQL优化
    SQL优化InnoDB引擎的三大特性,事务,外键,行级锁。执行更新的时候,where更新的条件一定要有索引,如果没有索引就会出现行锁升级为表锁,并且索引不能失效否则也会出现行锁升级为表锁,一但升级为表锁并发性能就会降低。......
  • 百亿数据量下的多表查询优化策略
    在当今大数据时代,数据库中的数据量不断增长,当面临需要进行多表查询且数据量达到百亿规模时,查询速度可能会变得极其缓慢,严重影响业务的正常运行。因此,优化查询速度成为了至关重要的任务。本文将详细介绍在这种情况下应该如何优化查询速度。一、问题分析(一)多表查询的复杂性多......
  • spark sql语句性能优化及执行计划
    一、优化点:1、notin替换为notexist;2、in替换为rightjoin;3、distinct替换为groupby;4、count(distinct)替换为count;5、where条件中,等号左右两边的数据类型需要一致;6、where条件中,等号左边不要有函数;7、where条件上移;8、优化点需要对照执行计划,并且有实际效果。二、对......
  • 鲸鱼优化算法+深度学习+注意力机制!WOA-CNN-LSTM-MATT多特征分类预测
    鲸鱼优化算法+深度学习+注意力机制!WOA-CNN-LSTM-MATT多特征分类预测目录鲸鱼优化算法+深度学习+注意力机制!WOA-CNN-LSTM-MATT多特征分类预测分类效果基本介绍程序设计参考资料分类效果基本介绍1.Matlab实现WOA-CNN-LSTM-MATT鲸鱼算法优化卷积神经网络-长......
  • 特征工程在营销组合建模中的应用:基于因果推断的机器学习方法优化渠道效应估计
    在机器学习领域,特征工程是提升模型性能的关键步骤。它涉及选择、创建和转换输入变量,以构建最能代表底层问题结构的特征集。然而,在许多实际应用中,仅仅依靠统计相关性进行特征选择可能导致误导性的结果,特别是在我们需要理解因果关系的场景中。因果推断方法为特征工程提供了一个更深......
  • 粒子群算法应用——聚类优化
    粒子群算法详见:https://blog.csdn.net/liutianbao2018/article/details/142743205目录1K均值聚类原理1.1什么是聚类1.2K均值聚类原理2PSO改进K均值聚类3结果对比1K均值聚类原理1.1什么是聚类聚类是一种无监督学习方法,通过相似性度量将数据点划分为多个簇,使得同......
  • 【储能优化】用于电池储能应用的不同多电平变流器拓扑
    摘要本文研究了多种多电平变流器拓扑结构在电池储能系统中的应用,以提高系统的能效和输出质量。不同拓扑结构如二极管箝位型、飞跨电容型以及混合型变流器,能够通过更细化的电压阶梯,实现更高的电压输出精度和降低开关损耗。实验结果表明,这些拓扑在储能应用中具有良好的动态响......