指派问题的求解

实验类型:验证性实验  综合性实验  设计性实验

实验目的:学会使用Matlab求解指派问题。

实验内容利用Matlab编程实现枚举法求解指派问题。

实验例题:有5人分别对应完成5项工作,其各自的耗费如下表所示,求最优指派方案;若最优方案不唯一,请给出所有的最优方案。

人员

任务

A

B

C

D

E

7

5

9

8

11

9

12

7

11

9

8

5

4

6

8

7

3

6

9

6

4

6

7

5

11

实验原理

1.perms命令:

作用:产生所有可能的排列

语法:

P = perms(v)

P =perms(v),这里v是一个长度为n的行向量,此函数产生v中这n个元素的全排列矩阵,每行为一个排列。矩阵P包含有n!行和n列。

2.sort 命令:

B = sort (A) 按升序对 A 的元素进行排序。 如果 A 是向量,则 sort (A) 对向量元素进行排序。 如果 A 是矩阵,则 sort (A) 会将 A 的列视为向量并对每列进行排序。 如果 A 是多维数组,则 sort (A) 沿大小不等于 1 的第一个数组维度计算,并将这些元素视为向量。

具体的用法如下:

1)Y=sort(X)

sort()的参数可以是向量,矩阵,数组等等。当X是向量时,sort(X)对X的元素进行升序排序;当X是矩阵时,sort(X)对X的每一列进行升序排序;(ascend是升序排列descend是降序排列)

2)Y=sort(X,DIM,MODE)

参数DIM表示对哪一个维数进行排序,例如当X是一个二维矩阵,当DIM=1时表示对X的每一列进行排序,当DIM=2时表示对X的每一行进行排序。

参数MODE表示按哪一种模式进行排序,当MODE=‘ASCEND’的时进行升序排序,当MODE=‘DESCEND’时,进行降序排序。Y返回已经排好序的X。

3)[Y,I] = sort(X,DIM,MODE),I返回索引序列,它表示Y中的元素与X中元素的对应。

实验步骤

1. 上机实验前先编写出程序代码

2. 录入、编辑程序

3. 调适程序至正确运行

4. 记录运行时的输入和输出

5. 对程序做进一步完善

程序代码

方法一:

C=input('程序与分配问题有关,请输入成本矩阵C:');

n=size(C);

weishu=(1:n);

Lie=perms(weishu);

[m,n]=size(Lie);

cost=zeros(m,1);

for i=1:m

    for k=1:n

      cost(i)=cost(i)+C(k,Lie(i,k));

    end

end

[a,~]=min(cost);

[Y,W]=sort(cost,1,'ascend');i=1;b=[];

while Y(i)==a

b=[b;W(i)];

i=i+1;

end

[bs,bss]=size(b(:,1));

x=zeros(n,n,bs);

for j=1:bs

    for i=1:n

        x(i,Lie(b(j),i),j)=1;

    end

end

a

x

方法二:

% 定义成本矩阵

C = [7 5 9 8 11;

     9 12 7 11 9;

     8 5 4 6 8;

     7 3 6 9 6;

     4 6 7 5 11];

% 初始化最小总成本和最优分配方案

min_cost = inf;

best_assignments = [];

best_costs = [];

% 枚举所有可能的分配方案

n = size(C, 1);

perms_assignments = perms(1:n);

% 计算每种分配方案的总成本,并找出最优方案

for i = 1:size(perms_assignments, 1)

    assignments = perms_assignments(i, :);

    total_cost = sum(C(sub2ind(size(C), 1:n, assignments)));

    if total_cost < min_cost

        min_cost = total_cost;

        best_assignments = assignments;

        best_costs = total_cost;

    elseif total_cost == min_cost

        best_assignments = [best_assignments; assignments];

        best_costs = [best_costs; total_cost];

    end

end

% 输出所有最优方案及其总成本

fprintf('所有最优分配方案及其总成本为:\n');

for j = 1:size(best_assignments, 1)

    fprintf('方案%d:', j);

    for i = 1:n

        fprintf(' 将工作%d分配给人员%d', i, best_assignments(j, i));

    end

    fprintf(',总耗费:%d\n', best_costs(j));

end

实验程序录入界面及程序运行结果界面:

方法一:

方法二:

实验总结

本次实验使用了一些Matlab的函数和语法,如perms、size、min、sort等,用于处理矩阵和计算。通过本次实验,学会了perms命令和sort命令的使用,并成功利用Matlab编程实现枚举法求解指派问题。(对于方法一)

这个实验旨在使用Matlab编程解决指派问题,并输出所有最优解的分配方案及其总成本。指派问题是一类组合优化问题,通常涉及将若干任务分配给若干资源,以最小化总成本或最大化总利润。实验中,首先定义了一个成本矩阵C,其中C(i, j)表示将任务i分配给资源j的成本。然后利用枚举法,遍历所有可能的分配方案,并计算每种方案的总成本。最后找出所有最优方案,并输出每种最优方案的分配方案及其总成本。(对于方法二)

本实验通过编写Matlab代码,成功实现了指派问题的求解,并输出了所有最优解的分配方案及其总成本。这个实验有助于加深对指派问题的理解,以及对Matlab编程的应用能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/57922.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

商品满减、限时活动、折扣活动的计算最划算 golang

可以对商品的不同活动&#xff08;如满减、限时价和折扣&#xff09;进行分组&#xff0c;并在购物车中显示各个活动标签下的最优价格组合。以下代码将商品按活动类别进行分组计算&#xff0c;并输出在购物车中的显示信息。 package mainimport ("fmt""math&qu…

AWS RDS Oracle hit ORA-39405

报错信息&#xff1a; ORA-39405: Oracle Data Pump does not support importing from a source database with TSTZ version 42 into a target database with TSTZ version 35. 分析过程&#xff1a; 这个报错是由于timezone_file的版本&#xff0c;源端比目标端高&#xf…

显卡服务器和普通服务器之间的区别有哪些?

显卡服务器也被称之为GPU服务器&#xff0c;显卡服务器与普通的服务器之间有着很明显的区别&#xff0c;下面就让我们共同来了解一下吧&#xff01; 普通服务器的主要处理器通常都是配备的中央处理器&#xff0c;可以用于执行大部分通用计算任务和操作系统的管理&#xff1b;而…

下载安装COPT+如何在jupyter中使用(安装心得,windows,最新7.2版本)

目录 1.到杉树科技官网申请下载COPT 2.安装COPT&配置许可文件 3.在jupyter中使用COPT的python接口 最近看到一本和数学建模有关的新书&#xff1a;《数学建模与数学规划&#xff1a;方法、案例及编程实战》&#xff0c;作为数学建模老手&#xff0c;肯定要学习一下&…

Python自动化运维:技能掌握与快速入门指南

#编程小白如何成为大神&#xff1f;大学生的最佳入门攻略# 在当今快速发展的IT行业中&#xff0c;Python自动化运维已经成为了一个不可或缺的技能。本文将为您详细介绍Python自动化运维所需的技能&#xff0c;并提供快速入门的资源&#xff0c;帮助您迅速掌握这一领域。 必备…

深入理解跨域资源共享(CORS)安全问题原理及解决思路

目录 引言 CORS 基础 CORS 安全问题原理 解决思路 结论 引言 跨域资源共享&#xff08;CORS, Cross-Origin Resource Sharing&#xff09;是现代Web应用中不可或缺的一部分&#xff0c;特别是在前后端分离的架构中。CORS允许一个域上的Web应用请求另一个域上的资源&#…

基于“互联网+”医养结合的智慧养老实训室建设方案

一、建设背景 根据国家统计局的数据&#xff0c;截至2023年末&#xff0c;我国60岁及以上的老年人口已达到29,697万人&#xff0c;占总人口的21.1%&#xff1b;其中&#xff0c;65岁及以上的人口为21,676万人&#xff0c;占总人口的15.4%。这一数据表明&#xff0c;我国正面临…

为什么需要MQ消息系统,mysql 不能满足需求吗?

大家好&#xff0c;我是锋哥。今天分享关于【为什么需要MQ消息系统&#xff0c;mysql 不能满足需求吗&#xff1f;】面试题&#xff1f;希望对大家有帮助&#xff1b; 为什么需要MQ消息系统&#xff0c;mysql 不能满足需求吗&#xff1f; 1000道 互联网大厂Java工程师 精选面试…

C++编程法则365天一天一条(303)异步编程之std::promise和std::future

文章目录 主要特点基本用法示例代码使用场景注意事项std::promise 是 C++11 引入的一个模板类,位于 <future> 头文件,用于实现异步操作中的值传递和异常传递。它与 std::future 一起使用,提供了一种机制,使得一个线程可以将结果或异常传递给另一个线程。 主要特点 异…

计算机网络-以太网小结

前导码与帧开始分界符有什么区别? 前导码--解决帧同步/时钟同步问题 帧开始分界符-解决帧对界问题 集线器 集线器通过双绞线连接终端, 学校机房的里面就有集线器 这种方式仍然属于共享式以太网, 传播方式依然是广播 网桥: 工作特点: 1.如果转发表中存在数据接收方的端口信息…

C/C++常用编译工具链:GCC,Clang

目录 GNU Compiler Collection GCC的优势 编译产生的中间文件 Clang Clang的特点 什么是LLVM&#xff1f; Clang编译过程中产生的中间表示文件 关于Clang的调试 C 编译工具链中有几个主要的编译工具&#xff0c;包括&#xff1a; GNU Compiler Collection (GCC…

NNLM——预测下一个单词

一、原理篇 NNLM&#xff08;Neural Network Language Model&#xff0c;神经网络语言模型&#xff09;是一种通过神经网络进行语言建模的技术&#xff0c;通常用于预测序列中的下一个词。 NNLM的核心思想是使用词嵌入&#xff08;word embedding&#xff09;将词转换为低维向…

【C++】类和对象(十二):实现日期类

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解C的实现日期类&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 1 /!/>/</>/<运算符重载2 /-//-运算符重载(A) 先写&#xff0c;再通过写(B…

KTHREAD--InitialStack和KernelStack和TSS的esp0

InitialStack和TSS.esp0的关系,在这里可以看到 mov ecx, [esi_KTHREAD.InitialStack] ; esi: newthread lea eax, [ecx-210h] ; 越过FPXSAVE指令存储地址 test byte ptr [eax-1Ah], 2 ; 判断efalgs寄存器的VIF位是否为1 jnz short loc_458743 sub eax, 10h…

xlrd.biffh.XLRDError: Excel xlsx file; not supported

文章目录 一、问题报错二、报错原因三、解决思路四、解决方法 一、问题报错 在处理Excel文件时&#xff0c;特别是当我们使用Python的xlrd库来读取.xlsx格式的文件&#xff0c;偶尔会遇到这样一个错误&#xff1a;“xlrd.biffh.XLRDError: Excel xlsx file; not supported”。…

二叉树进阶-二叉搜索树

目录 1.二叉树的概念 2.二叉搜索树的操作 2.1二叉搜索树的结构 2.2实现节点的查找&#xff08;find&#xff09; 2.3实现增加节点&#xff08;insert&#xff09; 2.4实现删除节点&#xff08;erase&#xff09; 2.5析构函数 2.6二叉搜索树的完整实现 3.二叉搜索树的应…

「Mac畅玩鸿蒙与硬件24」UI互动应用篇1 - 灯光控制小项目

本篇将带领你实现一个互动性十足的灯光控制小项目&#xff0c;用户可以通过点击按钮来控制灯光的开关。该项目将涉及状态管理、动态图片加载以及按钮交互&#xff0c;是学习鸿蒙应用开发的重要基础。 关键词 UI互动应用状态管理动态图片加载用户交互 一、功能说明 在这个灯光…

自制inscode项目推荐:色块小游戏

小编的inscode部署项目&#xff1a;割绳子游戏。 更多精彩内容见InsCode - 让你的灵感立刻落地~ 介绍一下项目及玩法。 游戏概述 颜色匹配小游戏是一款基于HTML、CSS和JavaScript开发的简单而有趣的网页游戏。游戏的目标是通过点击颜色块&#xff0c;将整个游戏板上的所有方块…

YOLOv6-4.0部分代码阅读笔记-effidehead_distill_ns.py

effidehead_distill_ns.py yolov6\models\heads\effidehead_distill_ns.py ‌YOLOv6中的EffideHead模块主要有三种变体&#xff1a; EffideHead_Distill_NS 、 EffideHead_FuseAB 和 EffideHead_Lite &#xff0c;它们在功能和设计上有所不同。‌ EffideHead_Distill_NS &am…

自动驾驶-端到端大模型

文章目录 端到端大模型基本概念:优势特点:应用领域:面临的挑战:自动驾驶端到端大模型技术原理:优势:面临的挑战:自动驾驶的端到端大模型用了什么技术?深度学习技术:多模态数据融合技术:强化学习技术:模型压缩与优化技术:数据增强技术:端到端大模型 端到端大模型是…