您的位置:首页 > 生活 >

量子计算机在信用评分卡组合优化中的应用最优题解|世界新要闻

2023-04-23 08:56:49 来源:腾讯云


(资料图片)

量子计算机在信用评分卡组合优化中的应用题解

思路

A题给我的整体感觉就是和2020年国赛中小微企业的信贷决策有点相似,只能说问题设置背景相似。稍后我也将为大家整理当年国赛的一些资料方便大家进行比赛建模。A题的背景设置为银行的信用卡或者贷款的收入问题。由于涉及的很多的专业知识,在问题中都给出的很明确的定义以及示例展示,大家只要人人阅读就可以理解。对于问题的解决,还提出了一个QUBO模型,一个二次无约束二值优化模型,

问题 1:在 100 个信用评分卡中找出 1 张及其对应阈值,使最终收入 最多, 请针对该问题进行建模,将该模型转为 QUBO 形式并求解。

找出 1 张及其对应阈值,使最终收入最多。对于问题一就是一个简单的最优值的求解,设置对应的决策变量,我认为可以使用0-1变量引入,信用卡的使用与否,以及对应的阈值选择,最后利用题设中给出的收入计算公式进行求解就可以。问题难度不大,对于问题一结果的精度要求应该会很高,因此大家做完,一定要去网上看看对应对应结果,这种问题结果基本都差不多,所以就算跑不出来代码,我们也可以直接借鉴网上的代码。稍后也将为大家整理一下优化的相关代码。

问题 2:假设赛题说明 3 目前已经选定了数据集中给出的信用评分卡 1、 信用评分卡 2 、信用评分卡 3 这三种规则,如何设置其对应的阈值,使最 终收入最多, 请针对该问题进行建模,将模型转为 QUBO 形式并求解。

问题二、已经选定了三个信用卡,让我们选择阈值进行计算最终收入。对于这个问题我们可以看作是问题三的一个方面。我们不再考虑信用卡的信息,而是单纯的考虑阈值。因此,这里我们也可以建立优化模型,个人还是感觉选择0-1变量设置决策变量会好一些。其次,设置收入为目标函数,进行计算即可。

问题 3 :从所给附录中 100 个信用评分卡中任选取 3 种信用评分卡, 并设置合理的阈值,使得最终收入最多,请针对该问题进行建模,并将模 型转为 QUBO 形式并求解。

问题三、就是一个问题一、问题二的综合。需要同时考虑信用卡的选取以及阈值的选取。对于这一问,我们通常会选择延用问题一二的模型,进行深入编写代码即可。综合来看,A题的最大难度似乎在于代码的编程实现,其实不然,现在有了GPT我们可以进行参考,同时对于A题这种对答案要求精度很好的题目,通常网上也是有一些公开的答案,在比赛期间。我们也是可以进行借鉴的。

总结: A题的难度不在于模型的进阿里,而是模型的转化为QUBO 形式,以及模型的代码编写。对于代码编写我们可以参考网上的结果,直接放上代码就可以。但是对于模型的转化,就需要大家各显神通了。稍后,我也会将参考文献进行多版本翻译,分享给大家。

1.# 导入所需的库2.import dwave.cloud3.import dwavebinarycsp4.from dwave.system.samplers import DWaveSampler5.from dwave.system.composites import EmbeddingComposite6.import numpy as np7.8.# 定义信用评分卡的个数和阈值的个数9.num_cards = 10010.num_thresholds = num_cards - 111.12.# 定义信用评分卡和阈值的权重13.card_weights = np.random.rand(num_cards)14.threshold_weights = np.random.rand(num_thresholds)15.16.# 定义约束条件17.csp = dwavebinarycsp.ConstraintSatisfactionProblem(dwavebinarycsp.BINARY)18.for i in range(num_cards):19.    for j in range(num_thresholds):20.        csp.add_constraint(lambda x, i=i, j=j: (x[i] + x[i+1] - 2*x[num_cards+j]) <= 0, [i, i+1, num_cards+j])21.22.# 将约束条件转换为 QUBO 形式23.bqm = dwavebinarycsp.stitch(csp)24.25.# 在 D-Wave 上求解 QUBO 模型26.sampler = EmbeddingComposite(DWaveSampler(solver={"qpu": True}))27.response = sampler.sample(bqm, num_reads=1000)28.29.# 输出结果30.print(response)

关键词: