量子计算在金融风控中的应用:信用评分卡组合优化建模与QUBO转化实践

发布时间:2026/8/15 2:13:13

量子计算在金融风控中的应用:信用评分卡组合优化建模与QUBO转化实践
1. 项目概述当量子计算遇上金融风控去年带队参加MathorCup拿到A题“量子计算机在信用评分卡组合优化中的应用”时团队里几个搞算法的同学眼睛都亮了。这题目听起来就很有“未来感”——一边是金融领域里最经典、最“古老”的信用评分卡组合优化问题另一边是代表着计算范式革命的量子计算机。很多人第一反应可能是这俩能扯上关系吗是不是为了蹭热点但真正沉下来分析你会发现这道题出得相当巧妙它精准地戳中了当前金融科技领域的一个核心痛点如何在浩如烟海的规则组合中找到那个风险与收益的最优平衡点。传统的信用评分卡组合优化本质上是一个组合爆炸问题。假设你有几十张评分卡每张卡有不同的通过率、坏账率你要从中选出一部分设定各自的阈值来构建一个整体的审批策略。这个策略要同时满足总通过率不低于某个值、总坏账率不高于某个值还要让总利润最大化。用经典的精确算法比如动态规划去解当评分卡数量稍多比如超过20张计算量就会大到令人绝望。启发式算法如遗传算法、模拟退火虽然能求近似解但解的质量和稳定性时常让人心里没底。而量子计算特别是基于量子退火原理的专用机其天然优势就是处理这类组合优化问题。它通过将问题映射到物理量子比特的相互作用上利用量子隧穿等效应在巨大的解空间中高效地寻找能量最低态即最优解。这道题的核心就是要求我们搭建一座桥梁如何将金融风控中的评分卡组合优化这个业务问题转化为量子计算机尤其是量子退火机能够理解和高效求解的数学模型——即QUBO二次无约束二值优化模型。这不仅仅是一次数学建模竞赛更像是一次前沿技术落地的预演。接下来我将详细拆解我们当时的建模全过程、关键的代码实现以及那些在论文里不会写的“踩坑”心得。2. 问题重述与核心思路拆解2.1 信用评分卡组合优化问题定义题目通常会给出一系列信用评分卡的数据。我们假设有N张评分卡。对于第i张卡其关键业务指标包括通过率 ( p_i )使用该卡审批时客户通过的概率。坏账率 ( b_i )在通过的客户中最终发生违约坏账的比例。利润系数 ( r_i )每通过一个客户并正常回款所能带来的平均利润。坏账则意味着损失本金通常利润为负或零。我们的决策变量是是否采用第i张评分卡以及如果采用其审批阈值设定为多少。为简化并契合QUBO形式我们通常将阈值选择也离散化为几个档位。例如每张卡可以选择“宽松”、“中等”、“严格”三档阈值每档对应不同的通过率 ( p_{i,k} ) 和坏账率 ( b_{i,k} )其中k表示档位。优化目标是最大化总期望利润。总利润由所有被选中的评分卡在其选定档位下通过的客户所带来的利润之和减去坏账造成的损失之和。约束条件通常包括总通过率约束所有被选中评分卡的综合通过率不能低于一个下限 ( P_{min} )。这里“综合通过率”的计算需要谨慎。由于一个客户可能会被多张卡审批直接相加会导致重复计算。更合理的假设是客户依次经过选中的评分卡审批只有通过所有卡的审批才算最终通过。因此总通过率是各选中评分卡通过率的乘积假设各卡审批独立。但乘积形式是非线性的会给建模带来困难。一种常见的简化是采用加权平均或其他线性近似或者题目本身可能定义了明确的综合通过率计算方式。总坏账率约束所有被选中评分卡的综合坏账率不能高于一个上限 ( B_{max} )。类似地综合坏账率也需要明确定义。可能是通过客户的加权平均坏账率。逻辑约束对于同一张评分卡i最多只能选择一个阈值档位即不能同时采用“宽松”和“严格”档。2.2 通往QUBO的建模思路总览量子退火机如D-Wave直接求解的是QUBO模型其标准形式为 [ \min_{x \in {0,1}^n} x^T Q x ] 其中x是二值决策变量向量0或1Q是一个实对称矩阵或上三角矩阵。我们的核心任务就是将上述带有约束的利润最大化问题转化为一个无约束的QUBO最小化问题。转化的精髓在于将约束条件作为惩罚项加入到目标函数中。如果解违反了约束惩罚项就会使目标函数值在QUBO中对应“能量”变大从而被量子退火过程“淘汰”。因此整体思路分为三步定义二值决策变量用x_{i,k}表示是否选择第i张评分卡的第k个阈值档位。x_{i,k} 1表示选择0表示不选。构建原始目标函数根据业务逻辑用决策变量x_{i,k}表示总利润。处理约束将总通过率约束、总坏账率约束和每张卡的单选约束都以惩罚项λ * (约束 violation)^2的形式加入目标函数。其中λ是一个足够大的正数惩罚系数确保在最优解处约束 violation 必须为0或足够小。最终将加上了惩罚项的目标函数整理成x^T Q x的矩阵形式这个Q矩阵就是我们需要输入给量子退火求解器的东西。3. 详细数学模型构建过程3.1 决策变量与参数定义首先我们明确定义所有符号索引( i 1, 2, ..., N )评分卡索引。( k 1, 2, ..., K )每张评分卡可选的阈值档位索引例如K3。参数输入数据( p_{i,k} )选择第i张卡的第k档阈值时该卡的通过率。( b_{i,k} )选择第i张卡的第k档阈值时该卡的坏账率。( r_{i,k} )选择第i张卡的第k档阈值时每通过一个客户带来的利润。通常( r_{i,k} (1 - b_{i,k}) * 本金 * 利率 - b_{i,k} * 本金 )。( P_{min} )要求的总通过率下限。( B_{max} )要求的总坏账率上限。( V )总的客户申请量用于将比率转换为绝对数量有时可以约去简化计算。决策变量( x_{i,k} \in {0, 1} )二值变量。1表示选择第i张卡的第k档阈值0表示不选。3.2 目标函数总利润构建总期望利润是核心目标。假设客户申请总量为V那么通过第i张卡第k档的客户数量为 ( V \cdot p_{i,k} )注意这是假设单独使用该卡的情况。在组合中实际通过人数取决于组合规则这里先构建基础项。这部分客户带来的期望利润为通过人数 × 单客期望利润 ( V \cdot p_{i,k} \cdot r_{i,k} )。因此如果我们选择了变量 ( x_{i,k} )则该项贡献的利润为 ( V \cdot p_{i,k} \cdot r_{i,k} \cdot x_{i,k} )。总利润函数最大化为[ \text{Profit} V \cdot \sum_{i1}^{N} \sum_{k1}^{K} (p_{i,k} \cdot r_{i,k}) \cdot x_{i,k} ] 由于V是常数最大化Profit等价于最大化括号内的求和项。我们记 ( c_{i,k} p_{i,k} \cdot r_{i,k} )称为“利润系数”。那么原始目标最大化为 [ \max \sum_{i,k} c_{i,k} \cdot x_{i,k} ] 在转化为QUBO时我们需要最小化目标。因此将最大化转为最小化 [ \min - \sum_{i,k} c_{i,k} \cdot x_{i,k} ] 这就是QUBO中的线性项部分。在Q矩阵中线性项 ( c_i x_i ) 体现在Q矩阵的对角线元素Q[i][i]上。3.3 约束条件处理与惩罚项构建这是建模中最关键也最需要技巧的部分。3.3.1 每张卡的单选约束对于任意一张卡i最多只能选择一个档位。即 [ \sum_{k1}^{K} x_{i,k} \leq 1 \quad \forall i ] “最多一个”意味着可以一个都不选这张卡被弃用。我们可以将其转化为等式约束的惩罚项。理想情况是sum 0或sum 1。违反情况是sum 2。一个常用的技巧是将其写为 [ \left( \sum_{k1}^{K} x_{i,k} - 1 \right)^2 ] 这个式子当sum 1时为0当sum 0时为1当sum 2时大于1。这不符合我们“允许为0”的要求。因此更准确的惩罚项应该只惩罚sum 2的情况。但构造这样的精确惩罚项比较麻烦。一个在实践中广泛使用的简化方法是我们强行要求每张卡必须且只能选一个档位。这可以通过引入一个“虚拟档位”或“不选档位”来实现。具体做法为每张卡i增加一个额外的档位k0。这个档位代表“不选这张卡”。它的通过率 ( p_{i,0} 1 )坏账率 ( b_{i,0} 0 )利润 ( r_{i,0} 0 )。这样决策变量变为 ( x_{i,k} )其中k 0, 1, ..., K并且强制约束 [ \sum_{k0}^{K} x_{i,k} 1 \quad \forall i ] 这是一个等式约束可以完美地转化为惩罚项 ( \lambda_1 \cdot (\sum_{k0}^{K} x_{i,k} - 1)^2 )。在后续的通过率和坏账率计算中k0的档位因为p1, b0相当于这张卡不存在对整体业务指标没有影响。3.3.2 总通过率约束这是最大的难点。假设我们采用“客户需通过所有选中卡审批”的串联模型那么总通过率是各选中卡通过率的乘积。但我们的决策变量是二值的乘积形式会导致高阶二次以上项无法放入QUBO二次型中。解决方案采用线性加权近似或利用题目给定的计算方式。如果题目说明总通过率是选中卡通过率的加权平均例如以每张卡的预期审批客户数量为权重那么计算就是线性的。 [ P_{total} \frac{ \sum_{i,k} p_{i,k} \cdot x_{i,k} \cdot w_{i,k} }{ \sum_{i,k} w_{i,k} \cdot x_{i,k} } ] 其中 ( w_{i,k} ) 是权重如前序环节的通过量。即使这样它仍然是一个分式不是线性的。更实用的方法将约束转化为关于“总通过人数”的线性约束。假设总客户量为V要求总通过人数不低于 ( V \cdot P_{min} )。 那么总通过人数如何计算如果我们采用加权平均的思想且假设权重与通过率本身相关例如每张卡独立作用一个简化的线性模型是 [ \text{Total_Pass_Persons} V \cdot \sum_{i,k} \alpha_{i,k} \cdot p_{i,k} \cdot x_{i,k} ] 其中 ( \alpha_{i,k} ) 是一个调整系数可以简单设为1或者根据业务逻辑设定。那么通过率约束变为 [ \sum_{i,k} \alpha_{i,k} \cdot p_{i,k} \cdot x_{i,k} \geq P_{min} ] 这是一个线性不等式约束。为了放入QUBO我们引入一个松弛变量s_p将其变为等式 [ \sum_{i,k} \alpha_{i,k} \cdot p_{i,k} \cdot x_{i,k} - s_p P_{min}, \quad s_p \geq 0 ] 松弛变量s_p也需要用二进制变量表示。我们可以用多个二进制变量的线性组合来近似表示一个连续变量例如( s_p \sum_{j0}^{M-1} 2^j \cdot y_j )其中 ( y_j ) 是新的二进制变量。这样等式约束就可以转化为惩罚项 ( \lambda_2 \cdot (\sum_{i,k} \alpha_{i,k} p_{i,k} x_{i,k} - \sum_j 2^j y_j - P_{min})^2 )。注意这种方法会显著增加变量数量每个松弛变量需要多个二进制变量表示。在资源有限的量子退火机上这可能是个问题。因此在实际竞赛中往往会对模型进行极大简化例如假设一个更简单的综合通过率计算公式甚至可能题目本身会给出明确的计算公式我们需要做的就是严格按照题目描述来建模。3.3.3 总坏账率约束处理方式与总通过率约束完全类似。假设综合坏账率是选中卡坏账率的线性加权和 [ B_{total} \frac{ \sum_{i,k} b_{i,k} \cdot x_{i,k} \cdot w‘{i,k} }{ \sum{i,k} w’{i,k} \cdot x{i,k} } ] 同样面临线性化难题。采用类似的简化将其转化为关于“总坏账金额”或“平均坏账率”的线性不等式约束 [ \sum_{i,k} \beta_{i,k} \cdot b_{i,k} \cdot x_{i,k} \leq B_{max} ] 然后引入松弛变量s_b将其变为等式并用二进制变量表示s_b最终得到惩罚项 ( \lambda_3 \cdot (\sum_{i,k} \beta_{i,k} b_{i,k} x_{i,k} s_b - B_{max})^2 )。注意这里是 s_b因为原不等式是“小于等于”。3.4 整合为QUBO模型将原始目标函数和所有约束的惩罚项相加得到最终需要最小化的总目标函数H [ H -\sum_{i,k} c_{i,k} x_{i,k} \lambda_1 \sum_i (\sum_k x_{i,k} - 1)^2 \lambda_2 (\sum_{i,k} \alpha p_{i,k} x_{i,k} - \sum_j 2^j y_j - P_{min})^2 \lambda_3 (\sum_{i,k} \beta b_{i,k} x_{i,k} \sum_l 2^l z_l - B_{max})^2 ] 其中y_j和z_l是为通过率约束和坏账率约束引入的二进制松弛变量。我们的任务是将H展开整理成标准QUBO形式 ( \sum_{i \le j} Q_{ij} x_i x_j )这里x是广义的决策变量向量包含了所有的x_{i,k}、y_j、z_l。展开平方项是关键步骤 以单选约束惩罚项为例( (\sum_k x_{i,k} - 1)^2 (\sum_k x_{i,k})^2 - 2\sum_k x_{i,k} 1 )。 其中 ( (\sum_k x_{i,k})^2 \sum_k x_{i,k}^2 2\sum_{kl} x_{i,k} x_{i,l} )。 由于 ( x ) 是二进制变量有 ( x^2 x )。因此 [ (\sum_k x_{i,k} - 1)^2 \sum_k x_{i,k} 2\sum_{kl} x_{i,k} x_{i,l} - 2\sum_k x_{i,k} 1 -\sum_k x_{i,k} 2\sum_{kl} x_{i,k} x_{i,l} 1 ] 常数项1对优化没有影响可以忽略。这样我们就得到了只包含x的线性项和二次项的表达式。对于带有松弛变量的复杂惩罚项展开过程类似但更繁琐会生成x与y、z之间的交叉项。最终所有项都可以归类到Q矩阵的对应位置线性项 ( a x_i ) 对应Q[i][i] a二次项 ( b x_i x_j ) 对应Q[i][j] b(i ! j)惩罚系数λ的选择这是一个经验性很强的参数。原则是必须足够大以确保在最优解处约束 violation 为0。通常可以从一个较大的值如λ100开始尝试观察求解结果是否满足约束。如果不满足则增大λ如果满足但目标函数值利润与已知可行解相差太大可能是λ过大导致惩罚项主导了优化过程可以适当减小。需要多次调试。4. 代码实现与求解流程我们当时使用Python主要借助dimod和dwave-ocean-sdk库来构建QUBO模型并调用求解器。由于直接使用真实的量子退火机如D-Wave需要云端接入且耗时在建模阶段我们主要使用经典模拟退火器如neal.SimulatedAnnealingSampler来验证模型和算法的正确性。4.1 环境准备与数据加载import numpy as np import pandas as pd from dimod import Binary, quicksum, ConstrainedQuadraticModel, Binaries from dimod import SimulatedAnnealingSampler import neal # 假设数据存储在CSV文件中列包括card_id, threshold_level, pass_rate, bad_rate, profit_coefficient data pd.read_csv(credit_score_cards.csv) N data[card_id].nunique() # 评分卡数量 K data[threshold_level].nunique() # 档位数量不包括“不选”档 # 提取参数矩阵 p_matrix data.pivot(indexcard_id, columnsthreshold_level, valuespass_rate).values b_matrix data.pivot(indexcard_id, columnsthreshold_level, valuesbad_rate).values c_matrix data.pivot(indexcard_id, columnsthreshold_level, valuesprofit_coefficient).values # 业务约束 P_min 0.70 # 总通过率下限 B_max 0.05 # 总坏账率上限 V 10000 # 假设客户总量 # 为“不选”档位扩充矩阵 (k0 档) # 不选档位的通过率视为1坏账率为0利润为0对综合指标无影响。 p_matrix_full np.hstack([np.ones((N, 1)), p_matrix]) # 第一列是k0档 b_matrix_full np.hstack([np.zeros((N, 1)), b_matrix]) c_matrix_full np.hstack([np.zeros((N, 1)), c_matrix]) K_full K 1 # 包括不选档位4.2 构建QUBO模型我们采用dimod的ConstrainedQuadraticModel(CQM) 来构建模型它支持直接添加约束然后可以内部将其转换为QUBO通过惩罚函数法。这样比手动展开平方项更清晰、更不易出错。# 初始化CQM模型 cqm ConstrainedQuadraticModel() # 1. 定义决策变量 x[i][k] x [[Binary(fx_{i}_{k}) for k in range(K_full)] for i in range(N)] # 2. 设置目标函数最大化总利润 - 最小化负利润 profit_expr quicksum(-c_matrix_full[i][k] * x[i][k] for i in range(N) for k in range(K_full)) cqm.set_objective(profit_expr) # 3. 添加约束 # 3.1 每张卡必须且只能选一个档位包括“不选”档 for i in range(N): cqm.add_constraint(quicksum(x[i][k] for k in range(K_full)) 1, labelfsingle_choice_{i}) # 3.2 总通过率约束 (简化线性加权模型权重设为1) # 综合通过率 (sum_i sum_k p_ik * x_ik) / (sum_i sum_k x_ik) P_min # 等价于 sum_i sum_k p_ik * x_ik P_min * (sum_i sum_k x_ik) # 由于 sum_i sum_k x_ik N (每张卡必选一个)所以简化为 # sum_i sum_k p_ik * x_ik P_min * N # 这是一个线性约束。 pass_rate_expr quicksum(p_matrix_full[i][k] * x[i][k] for i in range(N) for k in range(K_full)) cqm.add_constraint(pass_rate_expr P_min * N, labelmin_pass_rate) # 3.3 总坏账率约束 (类似简化) # 综合坏账率 (sum_i sum_k b_ik * x_ik) / (sum_i sum_k x_ik) B_max # 等价于 sum_i sum_k b_ik * x_ik B_max * N bad_rate_expr quicksum(b_matrix_full[i][k] * x[i][k] for i in range(N) for k in range(K_full)) cqm.add_constraint(bad_rate_expr B_max * N, labelmax_bad_rate)注意上面的通过率和坏账率约束是极度简化的假设各卡权重相等且为1。在实际比赛中需要根据题目给出的确切公式来构建表达式。如果公式复杂如分式、非线性可能需要像之前数学推导那样引入松弛变量并将其作为惩罚项加入目标函数而不是直接用CQM的add_constraint。CQM的add_constraint在内部也是用惩罚法处理但我们可以通过penalty参数来调整惩罚强度即我们之前提到的λ。4.3 模型求解与结果解析# 使用模拟退火采样器求解CQM sampler neal.SimulatedAnnealingSampler() sampleset sampler.sample_cqm(cqm, time_limit5) # 设置时间限制为5秒 # 获取第一个可行解满足所有约束的解 feasible_samples sampleset.filter(lambda d: d.is_feasible) if len(feasible_samples) 0: best_sample feasible_samples.first.sample print(找到可行解) # 解析结果 selected_cards [] total_profit 0 total_pass_rate_weighted 0 total_bad_rate_weighted 0 for i in range(N): for k in range(K_full): if best_sample.get(fx_{i}_{k}, 0) 1: if k 0: selected_cards.append((i, Not Selected)) else: selected_cards.append((i, k)) total_profit c_matrix_full[i][k] total_pass_rate_weighted p_matrix_full[i][k] total_bad_rate_weighted b_matrix_full[i][k] avg_pass_rate total_pass_rate_weighted / N avg_bad_rate total_bad_rate_weighted / N print(f选中的评分卡及档位: {selected_cards}) print(f总利润系数和: {total_profit}) print(f平均通过率: {avg_pass_rate:.4f} (约束 {P_min})) print(f平均坏账率: {avg_bad_rate:.4f} (约束 {B_max})) # 验证约束 if avg_pass_rate P_min and avg_bad_rate B_max: print(所有约束均满足) else: print(警告解不满足约束可能需要调整惩罚系数或模型。) else: print(未找到可行解。尝试调整惩罚系数或检查模型合理性。) # 可以查看能量最低的解即使不可行以分析约束违反情况 best_sample sampleset.first.sample # ... 解析并打印约束违反程度 ...4.4 与真实量子求解器的对接概念性如果拥有D-Wave的访问权限代码只需稍作修改。我们需要将CQM模型转换为BQMBinary Quadratic Model或直接生成Q矩阵然后提交给量子退火器。# 使用Ocean SDK将CQM转换为BQM通过惩罚函数法 from dimod import cqm_to_bqm # 指定惩罚强度对应之前的λ penalty_strength {single_choice: 10.0, min_pass_rate: 50.0, max_bad_rate: 50.0} bqm, invert cqm_to_bqm(cqm, penalty_strength) # 现在bqm就是一个标准的BinaryQuadraticModel可以提交给D-Wave # from dwave.system import DWaveSampler, EmbeddingComposite # sampler EmbeddingComposite(DWaveSampler()) # sampleset sampler.sample(bqm, num_reads1000, annealing_time100, ...)5. 核心难点、技巧与避坑指南在实际建模和编程过程中我们遇到了不少坑也总结出一些让模型更稳健、求解更高效的技巧。5.1 模型简化与业务逻辑的权衡这是最大的挑战。纯粹的串联相乘通过率模型无法直接放入QUBO。我们必须在模型准确性和可求解性之间做出权衡。技巧1与评委沟通你的假设。在论文中必须清晰说明你采用了哪种简化模型如线性加权平均并论证其合理性。例如可以假设评分卡是并行独立审批的总通过率是这些卡审批通过的客户的并集用一个近似公式来估算。只要逻辑自洽且能自圆其说就是可接受的。技巧2使用代理指标。如果直接建模综合通过率/坏账率困难可以考虑使用其他相关的、更容易建模的线性指标作为约束。例如约束“选中卡的平均通过率”和“平均坏账率”虽然不完全等价于综合指标但趋势一致可以作为有效的替代。技巧3分阶段求解。可以先不考虑复杂的综合指标约束用QUBO快速筛选出一个高分卡组合候选集。然后在这个较小的候选集上用经典的精确算法或仿真方法去计算精确的综合指标并做微调。这种“量子启发经典精修”的混合策略很实用。5.2 惩罚系数 λ 的调参艺术惩罚系数太小约束不起作用太大则惩罚项淹没原始目标可能找到一个严格满足约束但利润很差的解。技巧逐步放大法。先设一个较小的λ如1.0求解检查约束违反程度。然后按照违反程度的比例例如违反程度大的约束对应λ乘以10违反小的乘以2逐步增大λ直到找到可行解。记录下可行解对应的λ范围。技巧量纲对齐。确保惩罚项和原始目标项利润在数值量级上可比。可以先将利润系数归一化到[0,1]区间这样惩罚系数的调整范围会更直观。例如利润项在-1到0之间那么惩罚项也应在0到1这个量级附近开始调整。5.3 变量规模与量子比特映射即使经过简化变量数量N * (K1)加上松弛变量可能轻松超过几十甚至上百。当前量子退火机的可用量子比特数虽然成千上万但由于连接性的限制Chimera或Pegasus拓扑一个逻辑变量可能需要多个物理量子比特来表示称为嵌入这会消耗大量资源。技巧降维。在提交到真实量子硬件前尽量压缩变量。预过滤先用简单规则如单卡利润太低、坏账率太高剔除明显劣质的评分卡档位减少N和K。合并变量如果某些卡的档位属性相似可以考虑合并。减少松弛变量精度表示松弛变量的二进制位数M不必太大能区分约束的主要违反区间即可。技巧使用混合求解器。D-Wave提供的LeapHybridCQMSampler或LeapHybridBQMSampler是经典-量子混合求解器。它们能自动处理大规模问题将问题分解部分在量子处理器上运行部分在经典计算机上运行。对于这类规模的问题直接使用混合求解器是最省事、最可能出结果的方式。5.4 结果验证与稳定性分析量子退火是一种随机优化算法每次求解结果可能有细微差异。必须做多次读取num_reads不要只运行一次。设置num_reads1000或更多从返回的样本集中统计可行解的比例、最优解的能量分布等。分析解的质量分布绘制利润的分布直方图。如果分布集中说明求解稳定如果很分散可能需要调整退火参数如annealing_time或检查模型。与经典基准对比用经典的启发式算法如遗传算法对同一简化模型进行求解对比结果。如果量子退火找到的解更优或相当是一个有力的佐证。如果差很多需要分析原因是模型转换问题还是参数设置问题。5.5 代码实现的健壮性注意索引引入“不选”档位k0后所有数据矩阵的索引都要对应调整确保p_matrix_full[i][0] 1,b_matrix_full[i][0] 0。约束检查解析解后一定要用原始的业务公式重新计算一遍总通过率、总坏账率和总利润确保满足题目要求。CQM模型中的约束可能因为简化而与最终业务指标的计算公式有差异。可视化将求解结果可视化例如绘制选中卡的利润-坏账率散点图可以直观展示策略的特点。这道MathorCup A题是一个绝佳的研究案例它迫使你深入思考如何将一个现实的、复杂的业务问题提炼、简化和编码成一种新型计算硬件所能处理的形式。这个过程本身的价值远超过比赛输赢。即使没有真实的量子计算机通过经典模拟来实践这套QUBO建模流程也对理解组合优化问题的本质和量子计算的应用前景大有裨益。我们当时在反复调试模型和参数的过程中对“约束优化”、“惩罚函数法”有了肌肉记忆般的理解这是光看教科书学不来的。最后再分享一个小心得在论文写作中除了展示结果花一些篇幅坦诚讨论你模型的局限性、简化假设以及未来改进方向往往能体现出更深的思考更容易获得评委的青睐。

相关新闻

深入解析x86内存屏障:MFENCE、LFENCE、SFENCE原理与实践

深入解析x86内存屏障:MFENCE、LFENCE、SFENCE原理与实践

2026/8/15 2:13:13

1. 从一次诡异的Bug说起:为什么程序在“新”CPU上跑得更慢?几年前,我负责维护一个对延迟极其敏感的高频交易系统核心模块。在一次常规的服务器硬件升级后,一个诡异的现象出现了:新采购的CPU主频更高、缓存更大&#xf…

WinUtil免费系统优化全能面板:装软件、调性能、修故障一次搞定

WinUtil免费系统优化全能面板:装软件、调性能、修故障一次搞定

2026/8/15 2:03:12

WinUtil免费系统优化全能面板:装软件、调性能、修故障一次搞定 【免费下载链接】winutil Chris Titus Techs Windows Utility - Install Programs, Tweaks, Fixes, and Updates 项目地址: https://gitcode.com/GitHub_Trending/wi/winutil 电脑慢、软件散、更…

计算机毕业设计之在线音乐分享网站

计算机毕业设计之在线音乐分享网站

2026/8/15 2:03:12

随着互联网技术的不断进步,音乐分享已成为人们日常生活中的重要组成部分。为了满足广大音乐爱好者的需求,开发一个功能全面的在线音乐分享网站显得尤为重要。本项目旨在构建一个集音乐分享、用户互动与管理于一体的平台,通过提供丰富的音乐资…

从零搭建家庭机架服务器:硬件选型、ZFS存储与Proxmox虚拟化实战

从零搭建家庭机架服务器:硬件选型、ZFS存储与Proxmox虚拟化实战

2026/8/15 3:13:20

1. 从冲动到落地:为什么我要自己折腾一台机架式服务器?几年前,我还在用一台退役的台式机当家里的“服务器”,跑点下载、存点照片,觉得也够用了。直到有一次,因为硬盘突然挂掉,丢失了整整两年的家…

数学建模竞赛新范式:从算法解题到问题解决架构师

数学建模竞赛新范式:从算法解题到问题解决架构师

2026/8/15 3:13:20

1. 从“解题”到“解题”:2025Mathorcup竞赛的范式转变又到了一年一度的数学建模竞赛季,对于很多理工科学生来说,Mathorcup是一个绕不开的名字。今年,当我和团队里的几个研究生一起复盘2025年的赛题时,我们最大的感受是…

Python好找工作吗?别问,问就是真香,小白也能逆袭

Python好找工作吗?别问,问就是真香,小白也能逆袭

2026/8/15 3:13:20

有种就业市场, 其状态是非常健康的, 对于这个情况, 你或许不会觉得惊讶。有一种职位叫“开发者”, 它不但处于我们数据库范围内那些较受欢迎的职位当中, 而且站在历史沿革的层面来讲, 也是属于比较稳定的那类职位。要是你打算挑选一种语言去着手编程学习之事, 那么这种语言绝对…

Mybatis-Plus分页插件深度解析:从基础配置到性能优化实战

Mybatis-Plus分页插件深度解析:从基础配置到性能优化实战

2026/8/15 3:13:20

1. 项目概述:为什么Mybatis-Plus分页是开发者的“效率加速器”如果你正在用Spring Boot做后端开发,十有八九绕不开数据库分页这个需求。无论是管理后台的表格数据展示,还是移动端App的上拉加载更多,分页都是保证应用性能和用户体验…

Mac上Python环境配置全攻略:从安装到环境变量设置

Mac上Python环境配置全攻略:从安装到环境变量设置

2026/8/15 3:13:20

1. 为什么Mac上的Python环境配置总让人头疼? 如果你刚拿到一台Mac,或者准备开始学习Python,第一件事可能就是打开浏览器搜索“mac 安装 python”。这个看似简单的操作,却常常是新手遇到的第一个“拦路虎”。为什么?因…

计算机单片机毕设实战-STM32 驱动的温湿度监测智能除湿消毒设备设计与 APP 开发 基于 STM32 单片机的智能柜体本地与移动端协同控制系统(013003)

计算机单片机毕设实战-STM32 驱动的温湿度监测智能除湿消毒设备设计与 APP 开发 基于 STM32 单片机的智能柜体本地与移动端协同控制系统(013003)

2026/8/15 3:03:19

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

比较好的亚太EMBA,问了6位校友师资差别真的挺大

比较好的亚太EMBA,问了6位校友师资差别真的挺大

2026/8/13 11:01:28

比较好的亚太EMBA核心差异先看什么?对于希望兼顾工作与系统管理能力提升的亚太区高管而言,筛选匹配度高的EMBA项目时,师资配置是决定学习体验与实际收获的核心要素之一。我们结合3-4个公开信息透明、办学历史较长的亚太区主流EMBA项目特点&am…

备考3个月对比6份资料 海外游学的亚洲EMBA面试注意点

备考3个月对比6份资料 海外游学的亚洲EMBA面试注意点

2026/8/14 10:48:24

备考海外游学的亚洲EMBA面试,核心要围绕项目国际化设计逻辑、个人跨文化管理经验匹配度两个维度准备,避免把游学模块等同于普通旅游参访的认知偏差。不少备考者花3个月对比6份资料,却容易忽略面试官对“国际视野落地能力”的考察——比如香港…

比较好的国内EMBA,问了二十位校友聊透人脉价值

比较好的国内EMBA,问了二十位校友聊透人脉价值

2026/8/13 17:17:06

比较好的国内EMBA核心差异体现在哪些方面?比较好的国内EMBA的核心长期价值,很大程度上依托于校友网络的连接质量与资源生态的活跃度,这也是不少高管在择校时优先考量的因素。我们结合3-4个市场关注度较高的项目公开信息,从课程、师…

一文读懂快消WMS怎么选?2026年国内外10大主流WMS品牌盘点

一文读懂快消WMS怎么选?2026年国内外10大主流WMS品牌盘点

2026/8/15 0:03:07

快消品(FMCG)是流通速度较快、竞争较为激烈的行业之一。一瓶饮料从出厂到消费者手中,往往只有几十天甚至几天的周转窗口。这决定了快消行业的仓储管理系统(WMS)与制造业、电商行业存在明显区别:它不仅需要管…

内景 空间站内部 中国空间站 太空 内仓

内景 空间站内部 中国空间站 太空 内仓

2026/8/15 0:03:07

本项目为前几天收费帮学妹做的一个项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 空间站内部 中国空间站 太空 内仓 地址:本地PC端运行(或Web…

重新定义数据接口:3个突破性场景让通达信数据读取更智能

重新定义数据接口:3个突破性场景让通达信数据读取更智能

2026/8/15 0:03:07

重新定义数据接口:3个突破性场景让通达信数据读取更智能 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 当我们面对海量金融数据时,传统的数据获取方式往往让我们陷入困境—…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/15 1:04:46

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/9 13:42:46

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/14 19:35:14

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…