栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

01分数规划——Dinkelbach算法

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

01分数规划——Dinkelbach算法

这个算法说难,理解难,说简单,方法简单。

这个算法核心思想是用一个解去推出更优的解,用迭代来实现。

1. 我们对于一个解 r ,可以求出这个解对应的最优的所有 xi 。

2. 用这个 xi 来求出所有 xi 对应的最优解。

3. 判断是否为全局最优解(如果这个解是最优,那么他与上一个求出来的解相等),是则退出循环,否则回到1。

下面我们用一个样例说明一下:

原题:poj2976

我们要从下面4组数中取出3组数,使取出的 r=(∑ai)/(∑bi) 最大

a:3, 2, 4, 1

b:5, 3, 4, 2

先随意取 r=0.5 。

得 c:0.5, 0.5, 2, 0 ( ci=ai-bir ,至于原因看开头提到的那个博客)

排序得 c:2[3], 0.5[1], 0.5[2], 0[4] (方括号内的是在没排序前的下标,也就是各自的 i )

我们取 c 的前3个的 p=∑ai=9, q=∑bi=12 。

那么就得到新的解 r'=9/12=0.75 。

因为和上一个不相等,所以继续。

r=r'=0.75

c:-0.75, -0.25, 1, -0.5

c:1[3], -0.25[2], -0.5[4], -0.75[1]

p=7, q=9, r'=0.77...78

不等于,再重复一次。

r=r'=0.77...78

c:-0.88...89, -0.33...3, 0.88...89, -0.55...56

c:0.88...89[3], -0.33...33[2], -0.55...56[4], -0.88...89[1]

p=7, q=9, r'=0.77...78

现在我们发现等于了!那么终止循环,而0.77...78就是最后的结果。

参考博客

算法学习:分数规划_lvzelong2014的博客-CSDN博客_dinkelbach算法

C语言中qsort排序(数字、字符串、结构体多级排序详解及举例子)_徐不可说的博客-CSDN博客_qsort多级排序
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/954353.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号