数学建模--整数规划匈牙利算法的Python实现

目录

1.算法流程简介

2.算法核心代码

3.算法效果展示

1.算法流程简介

#整数规划模型--匈牙利算法求解
"""
整数规划模型及概念:
        规划问题的数学模型一般由三个因素构成 决策变量 目标函数 约束条件;
        线性规划即以线性函数为目标函数,线性条件为约束条件;
        如果一个线性规划模型中的部分或全部决策变量取整数值,则称该线性规划模型为整数线性规划模型,除此还有非线性整数规划。
整数规划的几种类型:
       1:纯整数规划:全部决策变量都必须取整数值的整数规划模型;
       2:混合整数规划:决策变量中有一部分必须取整数值,另一部分可以不取整数值的整数规划模型;
       3:0-1整数规划:决策变量只能取0或1的整数规划。
匈牙利算法基本思路:
        对费用矩阵C的行和列减去某个常数,将C化为有n个位于不同行不同列的零元素,
        令这些零元素对应的变量取1,其余变量取0,即得到指派问题的最优解。
        匈牙利法是基于指派问题的标准型的,标准型需满足以下3个条件:
        (1)目标函数求min;
        (2)效率矩阵为n阶方阵;
        (3)效率矩阵中所有的元素Cij>=0,且为常数
处理效率矩阵的原则:
        匈牙利算法的本质工作就是处理效率矩阵,时期变的符合一定的输入要求
        最终效果:效率矩阵通过一定的变换之后,每行每列都至少存在一个0,记这个矩阵为B。
        1.如果行列本身就有0,该行列不需要处理
        2.如果某行没有0,寻找到该行的min元素,此行都减去min。
        3.如果某列没有0,寻找到该列的min元素,此列都减去min。
"""

2.算法核心代码

#开始求解整数规划问题
from scipy.optimize import linear_sum_assignment
import numpy as np
#1.导入cost/效率矩阵:
cost_arr=np.array([[4,1,3],
                   [2,0,5],
                   [3,2,2]])
n=len(cost_arr)
row_best,col_best=linear_sum_assignment(cost_arr)
print("开销矩阵最优行索引解:",row_best)
print("开销矩阵最优列索引解:",col_best)
#求解最优解:
ans=0
best_ans=[]
for i in range(n):
    ans+=cost_arr[row_best[i]][col_best[i]]
    best_ans.append(cost_arr[row_best[i]][col_best[i]])
print("最优解由",n,"个数据进行组成")
for i in range(n):
    print("第",i+1,"个数据是位于开销矩阵第",row_best[i],"行第",col_best[i],"列的值:",cost_arr[row_best[i]][col_best[i]])
print("综上所示本题最优解组成是:",best_ans)
print("本题规划的最优解是:",ans)

3.算法效果展示

数学建模--整数规划匈牙利算法的Python实现_第1张图片

你可能感兴趣的:(数学建模,数学建模,python)