0-1分数规划的Dinkelbach算法

基本模型的概述

0-1分数规划问题是经济统计,数据挖掘中一类十分重要的问题.其基本的模型是,我们知道一组产品的投入a[n],也知道一组产品的可以得到的利润,那么,这个时候我们从这n件产品中选择k件,怎么样来选择才能让我们最终的选择利润率最高呢?即我们知道是sigma(b[i])/sigma(a[i])最大

模型的分析

很显然,我们知道,选择b[i]/a[i]最大的k件物品是无法找到最大的组合的,这个定理早已得到证明.那么我们怎么构造才能得到最大值呢?为此,我们设F(L)=sigma(b[i])-L*sigma(a[i]).此时,我们构造一个数组x[i],代表我们是否选择i产品.那么我们的问题又化为了求F(L)=sigma(x[i]*D[i])(D[i]=b[i]-L*a[i])容易知道,如果存在一个组合使得F(L)>0,那么我们可以知道有一个更加优越的组合,此时我们更新L,采用新的组合继续计算.如果我们计算出来的组合与上一次计算出来的组合相同,那么我们知道,Fmax=0.没有比此更好的组合了.这个组合即为最好的组合。
而要计算出来最优的组合,即为计算出F(L)的最大值即可。

计算0-1分数规划的Dinkelbach算法

该算法的伪代码如下所示:
Algorithm Dinkelbach(double L)
{
    for i=1 ~n
       g[i]= a[i]-L*a[i]
       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值