实习题目:匈牙利算法。
报告内容:1. 程序。
function [z,ans]=xiongyali(a)
a=a;b=a;
s=length(a);
ml=min(a确定矩阵行最小值,进行行减。
for i=1:s
a(i,:)a(i,:)ml(i);
endm=min(a确定矩阵列最小值,进行列减。
for j=1:s
a(:,j)=a(:,j)-m(j);
endnum=0;
while(num~=s) %终止条件是“(0)”的个数与矩阵的维数相同。
%index用以标记矩阵中的零元素,若a(i,j)=0,则index(i,j)=1,否则index(i,j)=0
index=ones(s);
index=a&index;
index=~index;
%flag用以标记划线位,flag=0 表示未被划线,%flag=1 表示有划线过,flag=2 表示为两直线交点。
%ans用以记录 a 中“(0)”的位置。
%循环后重新初始化flag,ans
flag = zeros(s);
ans = zeros(s);
%一次循环划线全过程,终止条件是所有的零元素均被直线覆盖,%即在flag>0位,index=0
while(sum(sum(index)))
%按行找出“(0)”所在位置,并对“(0)”所在列划线,%即设置flag,同时修改index,将结果填入ans
for i=1:s
t=0;l=0;
for j=1:s
if(flag(i,j)==0&&index(i,j)==1)
l=l+1;
t=j;end
endif(l==1)
flag(:,t)=flag(:,t)+1;
index(:,t)=0;
ans(i,t)=1;
endend
%按列找出“(0)”所在位置,并对“(0)”所在行划线,%即设置flag,同时修改index,将结果填入ans
for j=1:s
t=0;r=0;
for i=1:s
if(flag(i,j)==0&&index(i,j)==1)
r=r+1;
t=i;end
endif(r==1)
flag(t,:)flag(t,:)1;
index(t,:)0;
ans(t,j)=1;
endend
end %对 while(sum(sum(index)))
%处理过程。
%计数器:计算ans中1的个数,用num表示。
num=sum(sum(ans));
% 判断是否可以终止,若可以则跳出循环。
if(s==num)
break;
end%否则,进行下一步处理。
%确定未被划线的最小元素,用m表示。
m=max(max(a));
for i=1:s
for j=1:s
if(flag(i,j)==0)
if(a(i,j)m=a(i,j);
endend
endend
%未被划线,即flag=0处减去m;线交点,即flag=2处加上m
for i=1:s
for j=1:s
if(flag(i,j)==0)
a(i,j)=a(i,j)-m;
endif(flag(i,j)==2)
a(i,j)=a(i,j)+m;
endend
endend %对while(num~=s)
计算最优(min)值。
zm=ans.*b;
z=0;z=sum(sum(zm));
end2. 求解结果。
a=[0 14 9 3;9 20 0 23;23 0 3 8; 0 12 14 0];
z,ans]=xiongyali(a)z =
ans =
运筹学实验报告
山东工商学院。实验报告。课程名称运筹学。实验项目名称 excel规划求解 实验地点商学实验中心205室 实验 实训 日期周二下午 节 班级。姓名。学号。一 实验概述。一 实验目的。实验目的在于掌握应用计算机工具解决运筹学模型优化求解的方法步骤,熟悉运筹学优化软件excel 优化功能的使用,为今后在实...
运筹学实验报告
内容运输问题。班级。学生。学号。指导教师。2016 2017学年第二学期 一 p143页5.5某试验设备厂按合同规定在当年前四个月末分别提供同一型号的干燥箱 台给用户。该厂每个月的生产能力是65台,如果生产的产品当月不能交货,每台每月必须支付维护及存储费0.15万元,已知四个月内每台生产费分别是 9...
运筹学实验报告
西华大学实验报告。开课学院及实验室 交通与汽车学院计算机中心实验时间 年月日。1 实验目的。a 训练建模能力。b 应用excel建模及求解的方法应用 c 通过实验进一步掌握运筹学有关方法原理 求解过程,提高学生分析问题和解决问题能力。2 实验设备 仪器及材料。计算机 excel ilog软件。3 实...