有a种产品 A={A1,...,Aa}

有b种材料 B={B1,...,Bb}

产品,材料均由c种元素占比构成 C={C1,..,Cc}

产品需求数量为 D={D1,...,Da}

材料库存数量为 E={E1,...,Eb}

材料投入数量为 F={F1,...,Fb}

材料单价为 G={G1,...,Gb}

设计程序,在现有材料库存数量约束下,自动求解最优F,使得

(1)以最少的材料投入总价,满足产品需求

(2)以最少的材料投入总数量,满足产品需求

(3)按价格和数量权重比例为 H={H1,H2}, 对材料投入数量方案F进行打分,要求满足产品需求的同时,尽可能降低材料投入总价和材料投入总数量


现假设a=2,b=3,c=4,

产品元素构成矩阵为CA

CA = np.array(
    object=(.5, .4, .1, 0, .3, .2, .4, .2)
).reshape(
    (4, 2),
    order='F'
)

产品需求矩阵为AD

AD = np.array(
    object=[(100, 110)]
).T

则产品元素需求矩阵为CD

CD = np.dot(CA, AD)

(只有当所有产品同时投入时才需要,但现实中不会有这种情况,所以求产品元素需求矩阵没有意义)

材料元素构成矩阵为CB

材料库存矩阵为BE



以下是使用Python编写的程序,可以根据给定的条件求解最优的材料投入数量方案。

import numpy as np
from scipy.optimize import linprog

def solve_optimization_problem(A, B, C, D, E, G, H):
    # 构建线性规划问题
    num_products = len(A)
    num_materials = len(B)
    num_elements = len(C)
    
    # 构建目标函数系数
    c = np.zeros(num_materials)
    for i in range(num_materials):
        c[i] = G[i] * H[0] + H[1]
    
    # 构建约束条件矩阵
    A_eq = np.zeros((num_products, num_materials))
    for i in range(num_products):
        for j in range(num_materials):
            for k in range(num_elements):
                if C[k][j] > 0:
                    A_eq[i][j] += C[k][j] * A[i][k]
    
    # 构建约束条件右侧向量
    b_eq = np.zeros(num_products)
    for i in range(num_products):
        b_eq[i] = D[i]
    
    # 构建不等式约束条件矩阵
    A_ub = np.zeros((num_materials, num_materials))
    for i in range(num_materials):
        A_ub[i][i] = -1
    
    # 构建不等式约束条件右侧向量
    b_ub = np.zeros(num_materials)
    for i in range(num_materials):
        b_ub[i] = -E[i]
    
    # 求解线性规划问题
    res = linprog(c, A_ub=A_ub, b_ub=b_ub, A_eq=A_eq, b_eq=b_eq)
    
    return res.x

# 示例数据
A = [[0.2, 0.3, 0.5], [0.4, 0.1, 0.5]]
B = [[0.1, 0.2, 0.7], [0.3, 0.3, 0.4]]
C = [[0.1, 0.2], [0.3, 0.4], [0.5, 0.4]]
D = [100, 200]
E = [50, 100]
G = [1.5, 2.0]
H = [0.7, 0.3]

# 求解最优材料投入数量方案
optimal_F_price = solve_optimization_problem(A, B, C, D, E, G, H)
optimal_F_quantity = solve_optimization_problem(A, B, C, D, E, np.ones(len(G)), [1, 0])
optimal_F_score = solve_optimization_problem(A, B, C, D, E, G, H)

print("最优材料投入数量方案(以最少的材料投入总价满足产品需求):", optimal_F_price)
print("最优材料投入数量方案(以最少的材料投入总数量满足产品需求):", optimal_F_quantity)
print("最优材料投入数量方案(按价格和数量权重比例打分):", optimal_F_score)