【优化算法】变邻域搜索算法解决0-1背包问题(Knapsack Problem)代码实例 已
01 前言
经过小编这几天冒着挂科的风险,日日修炼,终于赶在考试周中又给大家更新了一篇干货文章。关于用变邻域搜索解决0-1背包问题的代码。怎样,大家有没有很感动?
02 什么是0-1背包问题?
0-1 背包问题:给定 n 种物品和一个容量为 C 的背包,物品 i 的重量是 w_i,其价值为 v_i 。
问:应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大?
为什么叫0-1背包问题呢?显然,面对每个物品,我们只有选择拿取或者不拿两种选择,不能选择装入某物品的一部分,也不能装入同一物品多次。拿就是1,不拿就是0。因此,就叫0-1背包问题。So simple, so naive.
03 代码小讲解
下面就几个邻域小动作给大家讲解一下。
解决方案设计
假设我们面前有n种物品,那么我们可以将解决方案设置成一个一维数组selection[n]。数组weights[n]表示重量,数组values[n]表示价值。
selection[i] = 1 表示装入第i个物品。
selection[i] = 0 表示不装入第i个物品。
总价值total_value = selection[i] * values[i]。 (i=1,2,3,4……n)
总重量total_weight = selection[i] * weights[i]。(i=1,2,3,4……n)
邻域动作1
将解决方案selection[n]的第i位取反(i=1,2,3,4……n)。比如:
有方案0010,那么生成的邻居解则有1010(第一位取反)、0110(第二位取反)、0000(第三位取反)、0011(第四位取反)。
不知道这么通俗易懂的大家understand了没有。
邻域动作2
对于解决方案selection[n],在第i (i=1,2,3,4……n)位取反的情况下,依次将第j (j=i+1,2,3,4……n)位也取反。还是for 一个 example吧。
对于解决方案0010。产生的邻居解如下:
邻域动作3
交换第i位和第i-3位的数。如果i<3。就交换最后的,比如:
selection[0]和selection[n-1]交换。
selection[1]和selection[n-2]交换。
selection[2]和selection[n-3]交换。
shaking程序
这个比较简单,随机取反一些位就行了。
下面上代码啦!欲直接下载代码文件,关注我们的公众号哦!回复【VNSKP】即可,不包括【】哦
【优化算法】变邻域搜索算法解决0-1背包问题(Knapsack Problem)代码实例 已的更多相关文章
- 【优化算法】变邻域搜索算法(VNS)求解TSP(附C++详细代码及注释)
00 前言 上次变邻域搜索的推文发出来以后,看过的小伙伴纷纷叫好.小编大受鼓舞,连夜赶工,总算是完成了手头上的一份关于变邻域搜索算法解TSP问题的代码.今天,就在此给大家双手奉上啦,希望大家能ENJO ...
- 【智能算法】变邻域搜索算法(Variable Neighborhood Search,VNS)超详细解析和TSP代码实例以及01背包代码实例
喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 00 目录 局部搜索再次科普 变邻域搜索 造轮子写代码 01 局部搜索科普三连 虽然之前做的很多篇启发式的算法都有跟大家提过局部 ...
- 【算法】变邻域搜索算法(Variable Neighborhood Search,VNS)超详细一看就懂的解析
更多精彩尽在微信公众号[程序猿声] 变邻域搜索算法(Variable Neighborhood Search,VNS)一看就懂的解析 00 目录 局部搜索再次科普 变邻域搜索 造轮子写代码 01 局部 ...
- 对背包问题(Knapsack Problem)的算法探究
对背包问题(Knapsack Problem)的算法探究 至繁归于至简,这次自己仍然用尽可能易理解和阅读的解决方式. 1.问题说明: 假设有一个背包的负重最多可达8公斤,而希望在背包中装入负重范围内可 ...
- 【高级算法】禁忌搜索算法解决3SAT问题(C++实现)
转载请注明出处:http://blog.csdn.net/zhoubin1992/article/details/46440389 近期梳理,翻出了当年高级算法课程做的题目.禁忌搜索算法解决3SAT问 ...
- 【智能算法】粒子群算法(Particle Swarm Optimization)超详细解析+入门代码实例讲解
喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 01 算法起源 粒子群优化算法(PSO)是一种进化计算技术(evolutionary computation),1995 年由E ...
- 最优化算法——常见优化算法分类及总结
之前做特征选择,实现过基于群智能算法进行最优化的搜索,看过一些群智能优化算法的论文,在此做一下总结. 在生活或者工作中存在各种各样的最优化问题,比如每个企业和个人都要考虑的一个问题"在一定成 ...
- 梯度优化算法总结以及solver及train.prototxt中相关参数解释
参考链接:http://sebastianruder.com/optimizing-gradient-descent/ 如果熟悉英文的话,强烈推荐阅读原文,毕竟翻译过程中因为个人理解有限,可能会有谬误 ...
- 使用LINGO来解决0/1背包算法问题
1.问题说明 0/1背包问题:我们有n种物品,物品j的重量为wj,价格为pj.我们假定所有物品的重量和价格都是非负的.背包所能承受的最大重量为W.如果限定每种物品只能选择0个或1个,则问题称为0-1背 ...
随机推荐
- 第1章 云端开发平台Salesforce CRM
1.1云计算平台 传统软件的开发往往耗资成千上万(甚至几百万)美元,有时需要几年的专业服务帮助建立和定制应用程序,而软件的业务问题往往由于其十分复杂或成本太高而无法触及.随着Internet的革新,改 ...
- pb笔记之数据窗口设置操作
1 使DataWindow列只能追加不能修改如何使DataWindow中的数据只能追加新记录而不能修改,利用 Column 的 Protect 属性可以很方便的做到这一点,方法如下:将每一列的 Pro ...
- Java常用函数式接口--Supplier接口使用案例
使用案例:
- 偷窥篇:重要的C#语言特性——30分钟LINQ教程
本文转自:http://www.cnblogs.com/liulun/archive/2013/02/26/2909985.html 千万别被这个页面的滚动条吓到!!! 我相信你一定能在30分钟之内看 ...
- Mybatis的实现原理
在spring启动的时候,spring会根据我们配置的有关mapper.xml的路径加载此路径下的xml文件,得到一个List<Resource>的集合,然后将这个集合转化成Resourc ...
- VSCode-设置webstorm的主题和快捷键
前提:VScode很火啊,理由:轻量,免费,不用找各种破解qi.... 好吧那我也从webstorm转过来试试,但是webstorm已经用了4年多了,对于一个有洁癖的人,必须把VScode打扮的和we ...
- POJ3255(Roadblocks)--次短路径
点这里看题目 3228K 485MS G++ 2453B 根据题意和测试用例知道这是一个求次短路径的题目.次短路径,就是比最短路径长那么一丢丢的路径,而题中又是要求从一点到指定点的次短路径,果断Dij ...
- ubuntu安装之后需要做什么
安装完ubuntu或者linux后应该做什么?首先在你安装完之后,都知道,很多系统都是有自带的一些软件之类,很多其实是不必要的,我们可以完全删掉,需要的时候再重装,那么安装完之后应该做什么呢? 1.智 ...
- DBShop后台RCE之曲线救国
本文最早发布在朋友的公众号 黑客信徒 中,文章是自己写的 不存在抄袭 特此申明 --------------------- 前言 DBShop是一款基于ZendFramework2框架的电子商务系统 ...
- flask打包安装文件
如果在一台新的电脑需要运行项目的时候,这时候就需要将项目项目所用到的模块都导出来 依赖文件生成pip freeze > requirements.txt 执行该命令会在项目根目录下生成一个 re ...