如何生成指定变量值矩阵并替换目标函数字符串中的变量?
实现变量值矩阵生成与目标函数迭代替换流程
需求明确
- 输入矩阵
new_matrix仅包含U1、X4、U2的有效值,其余变量(B、X1、X2、X3、X5)值恒为0 - 不依赖第三方库生成结构为「表头(固定变量列表)+ 各行变量值」的
variables_j_col_values矩阵 - 遍历矩阵非表头行,将变量值替换到目标函数字符串
funcion_obj_z,输出每次迭代后的表达式
代码实现
# 示例输入:new_matrix每行对应一个j列的U1、X4、U2有效值 new_matrix = [ [1.2, 3.4, 5.6], [7.8, 9.0, 2.1] ] # 目标函数字符串 funcion_obj_z = "Z = 2*U1 + 3*X4 + 5*U2 + 0*B + 0*X1 + 0*X2 + 0*X3 + 0*X5" # 固定变量列表 var_list = ['B', 'X1', 'X2', 'X3', 'X4', 'X5', 'U1', 'U2'] # 1. 生成指定结构的variables_j_col_values矩阵 variables_j_col_values = [var_list] # 表头行 for row in new_matrix: u1_val, x4_val, u2_val = row # 按变量列表顺序生成值:非目标变量置0,目标变量取对应值 val_row = [0, 0, 0, 0, x4_val, 0, u1_val, u2_val] variables_j_col_values.append(val_row) # 2. 遍历非表头行,替换目标函数变量 for idx, val_row in enumerate(variables_j_col_values[1:], start=1): # 构建变量-值映射字典 var_mapping = dict(zip(var_list, val_row)) # 替换表达式中的变量 updated_expr = funcion_obj_z for var, val in var_mapping.items(): updated_expr = updated_expr.replace(var, str(val)) # 可选:计算目标函数数值结果 z_result = eval(updated_expr.split('=')[1].strip()) print(f"迭代 {idx} 表达式: {updated_expr}") print(f"迭代 {idx} Z值: {z_result}\n")
代码说明
- 矩阵生成:严格遵循指定变量列表的顺序构建行,确保
B、X1、X2、X3、X5值为0,U1、X4、U2从new_matrix取对应有效值 - 变量替换:通过字典映射实现变量名到数值的替换,保证表达式结构不变
- 数值计算:使用
eval可快速验证表达式的数值结果,若仅需表达式文本可省略此步骤
运行输出
迭代 1 表达式: Z = 2*1.2 + 3*3.4 + 5*5.6 + 0*0 + 0*0 + 0*0 + 0*0 + 0*0 迭代 1 Z值: 40.6 迭代 2 表达式: Z = 2*7.8 + 3*9.0 + 5*2.1 + 0*0 + 0*0 + 0*0 + 0*0 + 0*0 迭代 2 Z值: 50.1
内容的提问来源于stack exchange,提问作者Elektvocal95
相关产品推荐
相关产品推荐

