最优化问题和NP问题

本文通过作者的亲身经历,介绍了最优化问题在城市环境下车机协同路径规划中的应用,涉及线性规划和背包问题。同时,文章深入讲解了NP问题,包括定义、分类和判定方法,以及NPC问题实例。最后,提及了P?=NP这一未解难题和未来将探讨的遗传算法等内容。
摘要由CSDN通过智能技术生成

写在前面

​笔者是某985高校电子信息工程专业的大二学生,上学期通过智库项目参与了老师的课题,但因笔者繁重的课业压力,迟迟未能动工,主要方向是城市环境下车机协同路径规划,即综合卡车运力强、无人机灵活便捷的优点解决物流配送最后一公里难题。在本专栏,笔者会陆续更新自己在寒假期间的学习心得与体会,希望大家多多关注,如有疏漏或错误也希望各位及时与笔者联系。如果觉得笔者的文章尚有几分启迪意义,欢迎点赞关注评论。大家的支持就是笔者最大的动力!

最优化问题和NP问题

本文参考资料 :

度娘:最优化问题

度娘:NP(未解难题)

CSDN博主a12638915:NP问题总结(概念+例子+证明)

数据结构教程(第3版),唐发根编著

最优化问题

​在生活和学习中我们经常会碰到一些最优化问题,比如最简单的统筹规划问题:烧水沏茶时,洗水壶需要1分钟,烧开水要用10分钟,洗茶壶要用2分钟,洗茶杯要用2分钟,拿茶叶要用1分钟,如何安排才能尽早喝上茶?再比如最经典的背包问题:如何用固定容量的背包装载最大价值的货物?这些情境无不透露着效率优先的思想。最优化问题也即针对某一问题,采取某种策略,使我们的所需效益最大化。

​我们最早系统接触的最优化问题应该是高中时的线性规划。举一个简单的例子,已知变量 x 和 y 满足 x >= 0,y >= 0,x + y <= 2,求 z = 2*y + x 的最大值。这类问题最常见的解法便是做出可行域,变换线性目标函数为截距型,根据图像的变化规律求出最终结果。这道题目虽然简单,却包含了最优化问题的所有特征,那接下来我们便给出最优化问题的定义:

​已知 X 为设计变量,代表设计空间的一个列向量,即 X = (x1,x2 … xn)T,并且 X 满足 g i(X) <= 0 (i = 1,2 … n),(此处指代所有的约束条件,实际问题中不一定均要求满足 <= 0),求设计空间中的 X0,s.t. f(X0) = max f(X) 或者 f(X0) = min f(X)。

通常情况下 f(X) 为设计变量的连续实函数,并且假定其有二阶连续偏导数。

​在以上定义的基础上,我们定义了等值面 {X | f(X) = c},其中 c 为任意常数。不难得到当设计空间为二维空间时,得到的是一条等值线。 等值面也具备一下基本性质:

  1. 不同值的等值面之间不相交。因为目标函数是单值函数;
  2. 除了极值点所在的等值面之外,不会在区域的内部中断。因为目标函数是连续函数;
  3. 等值面稠密的地方,目标函数值变化得比较快;稀疏的地方变化得比较慢(可以参考地理等高线的理解方式);

NP问题

一、定义

​在开始介绍NP问题之前,我们先来回顾一下时间复杂度的相关概念。要全面地分析一个算法的效率,需要综合考虑算法在最坏、最好和平均情况下的时间代价。对于最坏情况,主要采取大O表示方法来描述。一般的提法是:当且仅当存在正整数 c 和 n0,使得 f(n) <= c*g(n) 对所有的 n >= n0 成立,则称该算法的渐进时间复杂度为 f(n) = O(g(n))。常见的时间复杂度有O(log2 n) < O(n) < O(nlog2 n) < O(n2) < O(n3) < O(2n) < O(n!)。

NP问题针对的就是一个问题的时间复杂度。具体定义如下:

P类问题(Polynomial Problem): 存在多项式时间算法的问题。

NP类问题(Non-deterministic Polynomial Problem): 不存在多项式时间算法,但可以在多项式时间内验证出一个正确解的问题。

NPC问题(Non-deterministic Polynomial Complete Problem): 存在这样一个NP问题,所有的NP问题都可以约化成它。

NP-Hard问题(Non-deterministic Polynomial Hard Problem): 存在这样一个问题,所有的NP问题都可以约化成它。

​可以看到后两类问题的关键不同在于其本身是否为一个NP问题,而由于P类问题是可以在多项式时间复杂度内求解的,自然也可以在多项式时间内验证解的正确性,所以是特殊的NP问题。总的来说,上述问题的关系用一个Venn图可表示如下:
请添加图片描述
​接下来我们再解释一下约化,假设有两个问题 A 和 B,B 本身是一个复杂度比 A 更高的问题,若对 B 的某些条件进行特殊规定后,可以退化成问题 A,则称 A 问题可以约化到 B 。(是不是有些奇怪?明明是对 B 问题进行了简化,为什么不称 B 约化为 A ?这同样是笔者在学习过程中产生的一个小疑问,欢迎大家在评论区交流讨论 但定义就是这样的)。

二、判定

介绍完几类问题的定义,那如何判定它们呢?

​对于P类问题来说,往往是我们比较熟悉的算法,比如冒泡排序、矩阵乘法、快速排序等;

对于NP类问题来说,举一个解方程的例子,对于方程 x5 + 2x + 7 = 1035 来说,求解它很难,但是验证 x = 2 是它的解却很容易;

​对于 NPC 和 NP-Hard 问题来说,我们首先要做的是判断其是否为 NP 问题,接着根据定义,我们需要判断是否所有的 NP 问题都能约化成它,显然这种方法的工作量过大且不现实,但如果我们借助传递性,证明一个已知的 NPC 问题可以约化成要判断的问题,那是不是也迎刃而解了呢?因为 NPC 问题本就可以由所有的 NP 问题约化而来,我们借助这一特性即可完成判定。传递过程如下:

NP 问题 --> 已知的 NPC 问题 --> 欲判定的问题

三、NPC问题举例

既然在判定的过程中需要借助 NPC 问题,那下面我们就举出21个常见的 NPC 问题,供大家学习使用:

  • 布尔可满足性问题(Satisfiability):对于布尔逻辑内合取范式方程式的满足性问题(一般直接叫做SAT)

    • 0-1整数规划(0-1 integer programming)

    • 分团问题(Clique,参考独立集)

      • Set packing

      • 最小顶点覆盖问题(Vertex cover)

        • 集合覆盖问题(Set cover)

        • Feedback node set

        • Feedback arc set

        • 有向哈密顿循环(Directed Hamiltonian cycle)

          • 无向哈密顿循环(Undirected Hamiltonian cycle)
  • 每句话至多3个变量的布尔可满足性问题(Satisfiability with at most 3 literals per clause,3-SAT)

    • 图着色问题(Chromatic number)
      • 分团覆盖问题(Clique cover)
      • 精确覆盖问题(Exact cover)
        • Hitting set
        • Steiner tree
        • 三维匹配问题(3-dimensional matching)
        • 背包问题(Knapsack)
          • Job sequencing
          • 划分问题(Partition)
            • 最大割(Max cut)

上面的层次递进关系也代表了各问题间的约化关系。故所有的 NPC 问题其实都是从 SAT 问题约化而来的,而 SAT 问题本身则是通过定义证明的。

小结

在这篇文章中,笔者主要介绍了最优化问题和 NP 问题。其中最优化问题应用比较广泛,想必大家也都有自己的切身体会;而 NP 问题实际也牵涉一个至今仍未解决的难题:P ?= NP,笔者的文字只是个人浅薄的学习体会,难免存在不严谨的地方,感兴趣的同好也可以进一步学习。在下期博客中笔者将带来一些 population-based algorithm 的介绍,特别是遗传算法。欢迎大家继续关注!

  • 36
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值