【ICO 组合与整数优化笔记】Introduction 导论 1

本文是ICO组合与整数优化的导论,介绍了背包问题、旅行商问题和分配问题这三个经典的组合优化问题。背包问题探讨在限定总重量内如何选择物品以使总价值最大化;旅行商问题关注寻找访问所有城市的最短路径;分配问题旨在以最低成本完成任务分配。这些问题的复杂性在于可行解数量巨大,需要高效算法来解决。
摘要由CSDN通过智能技术生成

【ICO 组合与整数优化笔记】Introduction 导论 1

组合最优化(Combinatorial Optimization)是应用数学的一个领域,融合了组合数学、线性规划和算法理论中的方法。它一般被应用于解决离散结构(Discrete Structure)中的最优化问题。在组合最优化问题中,我们想要在有限的可行方案中找到最佳的组合方案,这样的最优解可以用图像或者表格的形式,具体地表现出来。但是,组合优化问题的难点通常在于,可行方案的数量过于庞大,简单粗暴的枚举法通常不适用。整数规划(Integer Programming)是其中一个行之有效的方法,它通过建立含有整数变量的数学模型来描述并解决组合问题。当然,整数规划问题的解决难度远远在线性规划(Linear Programming)之上,直接用优化解算器(Optimization Solver)来解决并不容易,所以在整数规划问题上,我们也需要寻求更有效率的方法。

本篇文章作为导论,将介绍几个组合与整数优化领域比较经典的实际问题,带领读者对组合优化问题有一个具体的认识。

  • 背包问题 Knapsack Problem
  • 旅行商问题 Traveling Salesman Problem
  • 分配问题 Assignment Problem

背包问题 Knapsack Problem

背包问题(Knapsack problem)是一种组合优化的NP完全问题。问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。问题的名称来源于如何选择最合适的物品放置于给定背包中。—— [Wikipedia]

一个具体的例子:假设一个游客到某地观光,他只背了一个最大承重为3kg的背包,准备在当地的市场买一些特产回家后在自己的店内转卖,他需要在10样特产里做选择,以求转卖后的利润最大化。特产信息如下:

特产编号 1 2 3 4 5 6 7 8 9 10
利润(元) 160 150 100 90 95 105 65 50 80 75
重量(kg) 1 0.9 0.8 0.75 0.7 0.5 0.8 0.5 0.6 0.55

由于每件特产的利润都是正的,我们希望可以买回所有的特产,但是10件特产的总重量为7.1kg,远远超过了背包的3kg容量;单买任意一件特产则背包内仍有剩余空间可用。所以我们的最佳特产采购方案是在所有都买和只买一件的两个极端情况中间。如何确定最佳方案呢?

最直接的方法是列举出所有的可行方案,比较它们的利润大小,在其中选择最优。假设我们买与不买一件特产的决定都是互相独立的,那么我们一共有  210=1024   2 10 = 1024 种可能的方案。如果我们使用枚举法,列举出1024种方案,剔除其中总重量超过3kg的方案,在剩下的方案中选择利润最大的一个,就可以得到最优解。但是,这样简单的计算和筛选仍然有一定的成本,并且随着特产数量的增加,总方案的数量也成爆炸式的指数增长,如果我们用枚举法从50种特产中进行选择,就需要分析  2501.13×1015   2 50 ≈ 1.13 × 10 15 种可能方案。显然,我们需要寻找更加高效的方法来解决背包问题。

假设每件特产的重量为 wi w i ,每件特产对应的利润为 pi p i ,对于每一件特产而言,我们要做的判断是:买或不买,这是一个二选一的决定,所以我们可以引入一个二元变量(Binary Variable) xi x i

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值