[发明专利]非对称问题拍卖算法的GPU实现方法在审
申请号: | 202210485454.7 | 申请日: | 2022-05-06 |
公开(公告)号: | CN114996521A | 公开(公告)日: | 2022-09-02 |
发明(设计)人: | 刘崇威;李豪杰;王智慧 | 申请(专利权)人: | 大连理工大学 |
主分类号: | G06F16/901 | 分类号: | G06F16/901;G06F17/16;G06Q30/08 |
代理公司: | 辽宁鸿文知识产权代理有限公司 21102 | 代理人: | 许明章;王海波 |
地址: | 116024 辽*** | 国省代码: | 辽宁;21 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 对称 问题 拍卖 算法 gpu 实现 方法 | ||
1.一种非对称问题拍卖算法的GPU实现方法,其特征在于,所述的方法包括步骤:
1)建立非对称问题拍卖算法的GPU实现方法;具体来讲,输入N×M的成本矩阵C1,如果N大于M,则对这个矩阵进行转置操作,此时将N与M的值互换,C1仍为N×M大小的矩阵,否则维持原状;初始化一个(N+1)×M的竞价矩阵B1;一个人/物分配表person2item1,包含N个元素,每个元素均初始化为-1;一个物/人分配表item2person1,包含M个元素,每个元素均初始化为-1;一个价格表prices1,包含M个元素,每个元素均初始化为0;然后做如下循环操作:
竞价矩阵B1中所有元素均设为0;
执行竞价步骤后,竞价矩阵B1得到更新;
执行分配步骤后,person2item1、prices1和item2person1得到更新;
在每次循环开始前判断person2item1中-1元素的个数,如果个数不为0则开始循环,否则结束循环;如果成本矩阵C1执行过转置操作,则最终结果为item2person1,否则为person2item1;
2)建立竞价步骤;输入一个N×M的成本矩阵C2,C2中所有元素均大于等于0;一个(N+1)×M的竞价矩阵B2,B2中所有元素均为0;一个人/物分配表person2item2,包含N个元素,每个元素均为大于-2且小于M的整数;一个价格表prices2,包含M个元素,每个元素均不为负数;GPU并行地计算出成本矩阵C2中的person2item2中数值为-1的索引所表示的行的最大值x2、第二大值y2、以及最大值x2在成本矩阵C2中的索引[n2,m2],n2为当前行索引,m2大于等于0且小于M;之后GPU并行地对B2进行如下更新:
B2[n2][m2]=x2–y2+1/N;
B2[N][m2]=1;
在计算某一行即行索引已知且为n2的M个元素中的x2,y2,[n2,m2]时,GPU首先生成一个M×3个元素的新数列t2并进行如下初始化:
t2[i2×3]=C2[n2][i2]–prices2[i2];
t2[i2×3+1]=0;
t2[i2×3+2]=i2;
其中,i2大于等于0且小于M;t2[i2×3]、t2[i2×3+1]和t2[i2×3+2]构成一组基本单位,基本单位的索引值为i2,三者分别表示单位内最大值、单位内第二大值、单位内最大值在成本矩阵C2中的列索引;初始化完成之后,计算小于M的2的幂中的最大值f2,对于索引值大于等于f2的单位,如果t2[i2×3]大于等于t2[(i2–f2)×3],则依次计算:
t2[(i2–f2)×3+1]=t2[(i2–f2)×3];
t2[(i2–f2)×3]=t2[i2×3];
t2[(i2–f2)×3+2]=t2[i2×3+2];
否则计算:
t2[(i2–f2)×3+1]=t2[i2×3];
之后在数列t2前f2×3个元素的基础上进行规约操作,即令j2为f2/2,对于索引值小于j2的单位,如果t2[i2×3]小于等于t2[(i2+j2)×3],则依次计算:
t2[i2×3+1]=max(t2[i2×3],t2[(i2+j2)×3+1]);
t2[i2×3]=t2[(i2+j2)×3];
t2[i2×3+2]=t2[(i2+j2)×3+2];
否则当t2[i2×3+1]小于t2[(i2+j2)×3]时计算:
t2[i2×3+1]=t2[(i2+j2)×3];
之后令j2为j2/2继续执行上述操作直到j2为0为止,则t2[0],t2[1],t2[2]即为所求x2,y2,m2;
3)建立分配步骤;输入一个(N+1)×M的竞价矩阵B3,B3中所有元素均不为负数;一个人/物分配表person2item3,包含N个元素,每个元素均为大于-2且小于M的整数;一个物/人分配表item2person3,包含M个元素,每个元素均为大于-2且小于N的整数;一个价格表prices3,包含M个元素,每个元素均不为负数;GPU并行地计算出竞价矩阵B3中的最后一行中数值为1的列索引的最大值x3、以及最大值x3在竞价矩阵B3中的索引[n3,m3],n3大于等于0且小于N,m3为当前列索引;之后GPU并行地对person2item3,prices3,和item2person3进行如下更新:
person3=item2person3[m3];
if(person3=0)
person2item3[person3]=-1;
prices3[m3]+=x3;
person2item3[n3]=m3;
item2person3[m3]=n3;
在计算某一列即列索引已知且为m3的前N个元素中的x3,[n3,m3]时,GPU首先生成一个N×2个元素的新数列t3并进行如下初始化:
t3[i3×2]=B3[i3][m3];
t3[i3×2+1]=i3;
其中,i3大于等于0且小于N;t3[i3×2]和t3[i3×2+1]构成一组基本单位,基本单位的索引值为i3,二者分别表示单位内最大值和单位内最大值在矩阵B3中的行索引;初始化完成之后,计算小于N的2的幂中的最大值f3,对于索引值大于等于f3的单位,如果t3[i3×2]大于t3[(i3–f3)×2],则计算:
t3[(i3–f3)×2]=t3[i3×2];
t3[(i3–f3)×2+1]=t3[i3×2+1];
之后在数列t3前f3×2个元素的基础上进行规约操作,即令j3为f3/2,对于索引值小于j3的单位,如果t3[i3×2]小于等于t3[(i3+j3)×2],则计算:
t3[i3×3]=t3[(i3+j3)×3];
t3[i3×3+1]=t3[(i3+j3)×3+1];
之后令j3为j3/2继续执行上述操作直到j3为0为止,则t3[0]和t3[1]即为所求x3和n3。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于大连理工大学,未经大连理工大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202210485454.7/1.html,转载请声明来源钻瓜专利网。