指派问题的求解

news2024/12/24 20:52:52
实验类型:验证性实验  综合性实验  设计性实验

实验目的:学会使用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.coloradmin.cn/o/2231441.html

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

相关文章

vue3 gsap 基于侦听器的动画

1、gsap实现动画 https://gsap.com/ .以上来自baidu ai 2、代码&#xff1a; 安装gsap&#xff1a;pnpm install gsap <script setup> import { ref, reactive, watch } from vue import gsap from gsapconst number ref(0) const tweened reactive({number: 0 })wat…

Flutter CustomScrollView 效果-顶栏透明与标签栏吸顶

CustomScrollView 效果 1. 关键组件 CustomScrollView, SliverOverlapAbsorber, SliverPersistentHeader 2. 关键内容 TLDR SliverOverlapAbsorber 包住 pinned为 true 的组件 可以被CustomScrollView 忽略高度。 以下的全部内容的都为了阐述上面这句话。初阶 Flutter 开发知…

江协科技STM32学习- P29 实验- 串口收发HEX数据包/文本数据包

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…

4.1 进程管理

在异步通信中&#xff0c;每个字符包含1位起始位、7位数据位和2位终止位&#xff0c;若每秒钟传送500个字符&#xff0c;则有效数据速率为&#xff08; &#xff09;。 A. 500b/s B. 700b/s C. 3500b/s D. 5000b/s 正确答案是 C。 解析 本题考查异步传输协议基础知识。 根据题目…

[进阶]集合的进阶(1)泛型

文章目录 泛型的深入泛型的细节泛型可以在很多地方定义泛型的继承和通配符总结 泛型的深入 泛型:是JDK5中引入的特性&#xff0c;可以在编译阶段约束操作的数据类型&#xff0c;并进行检查 泛型的格式:<数据类型> 注意:泛型只能引用数据类型 泛型的好处 统一了数据类型…

GB/T 28046.3-2011 道路车辆 电气及电子设备的环境条件和试验 第3部分:机械负荷(4)

写在前面 本系列文章主要讲解道路车辆电气及电子设备的环境条件和试验GB/T 28046标准的相关知识&#xff0c;希望能帮助更多的同学认识和了解GB/T 28046标准。 若有相关问题&#xff0c;欢迎评论沟通&#xff0c;共同进步。(*^▽^*) 第3部分&#xff1a;机械负荷 4.1 振动 …

【案例】旗帜飘动

开发平台&#xff1a;Unity 6.0 开发工具&#xff1a;Shader Graph 参考视频&#xff1a;Unity Shader Graph 旗帜飘动特效   一、效果图 二、Shader Graph 路线图 三、案例分析 核心思路&#xff1a;顶点偏移计算 与 顶点偏移忽略 3.1 纹理偏移 视觉上让旗帜保持动态飘动&a…

小白从零开始配置pytorch环境

一、下载ANACONDA 官方网址Anaconda Installers and Packages 笔者选择的是Anaconda3-5.3.0-Windows-x86_64.exe版本。全程安装可以手机开热点&#xff0c;会快一点。 二、查看电脑是否有显卡 1、打开任务管理器 2、查看电脑CUBA版本&#xff0c;如上篇文章所提到查看CUDA-V…

11.1 网络编程-套接字

练习&#xff1a; 使用搭建好的服务器和客户端&#xff0c;实现一个完整的注册&#xff0c;登录功能 服务器使用链表 文件IO的形式去记录账号和密码 代码实现&#xff1a; 服务器端&#xff1a; #include <myhead.h> struct Pack{char flags;char na…

基于MATLAB的战术手势识别

手势识别的研究起步于20世纪末&#xff0c;由于计算机技术的发展&#xff0c;特别是近年来虚拟现实技术的发展&#xff0c;手势识别的研究也到达一个新的高度。熵分析法是韩国的李金石、李振恩等人通过从背景复杂的视频数据中分割出人的手势形状&#xff0c;然后计算手型的质心…

面试题整理 1

实际参与的某公司面试&#xff0c;总结了遇到的值得整理记录的面试题。 目录 相对路径 正序判断 倒序判断 输出部门负责人及下级 代码实现 最终效果 科目平均分 SQL筛选 代码实现 分组错误 原因 查看版本 确认模式 设置模式 相遇洞穴 代码实现 方式一&#xf…

mysql查表相关练习

作业要求&#xff1a; 单表练习&#xff1a; 1 . 查询出部门编号为 D2019060011 的所有员工 2 . 所有财务总监的姓名、编号和部门编号。 3 . 找出奖金高于工资的员工。 4 . 找出奖金高于工资 40% 的员工。 5 找出部门编号为 D2019090011 中所有财务总监&#xff0c;和…

基于yolov5的输电线,电缆检测系统,支持图像检测,视频检测和实时摄像检测功能(pytorch框架,python源码)

更多目标检测和图像分类识别项目可看我主页其他文章 功能演示&#xff1a; yolov5&#xff0c;输电线(线缆)检测系统&#xff0c;系统既支持图像检测&#xff0c;也支持视频和摄像实时检测【pytorch框架】_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于yolov5的输…

C语言另一种编码方式开发状态机(无switch)

目录 概述 一、开发环境 二、coding 三、运行结果 四、总结 概述 状态机编码思想&#xff0c;在很多领域都随处可见&#xff0c;传统的coding方式使用switch case来实现&#xff0c;状态跳转可读性差&#xff0c;咋们换一种思路来实现状态机开发&#xff0c;该方式 拓展好…

录屏天花板,录课新玩法,人像+一切,PPT/PDF/视频/网页,也可即可录

上新啦 &#x1f4f1;&#x1f4bb; 录屏也能录课的万能神器——超级推荐&#xff01; 你是不是也在找一款能高效录屏、录课、轻松剪辑的小工具&#xff1f;作为一名需要频繁录制屏幕和课程内容的老师&#xff08;或内容创作者&#xff09;&#xff0c;我找到了这个宝藏App&…

vscode php Launch built-in server and debug, PHP内置服务xdebug调试,自定义启动参数配置使用示例

在vscode中&#xff0c;当我们安装了插件 PHP Debug&#xff08;xdebug.php-debug&#xff09;或者 xdebug.php-pack 后 我们通过内置默认的 php xdebug配置启动php项目后&#xff0c;默认情况下我们在vscode中设置断点是不会生效的&#xff0c;因为我们的内置php服务默认启动时…

Linux入门(2)

林纳斯托瓦兹 Linux之父 1. echo echo是向指定文件打印内容 ehco要打印的内容&#xff0c;不加任何操作就默认打印到显示器文件上。 知识点 在Linux下&#xff0c;一切皆文件。 打印到显示器&#xff0c;显示器也是文件。 2.重定向 >重定向操作&#xff0c;>指向的…

Java实战项目-基于 SpringBoot+Vue 的医院管理系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

代码随想录 | Day36 | 动态规划 :整数拆分不同的二叉搜索树

代码随想录 | Day36 | 动态规划 &#xff1a;整数拆分&不同的二叉搜索树 动态规划应该如何学习&#xff1f;-CSDN博客 动态规划学习&#xff1a; 1.思考回溯法&#xff08;深度优先遍历&#xff09;怎么写 注意要画树形结构图 2.转成记忆化搜索 看哪些地方是重复计算…

【书生.浦语实战营】——入门岛

【书生.浦语实战营】——入门岛_第一关_Linux基础 任务分布1. 本地vscode远程连接并进行端口映射端口映射What——何为端口映射How——怎么进行端口映射 2. Linux基础命令touch &#xff1a;创建文件mkdir &#xff1a;创建目录cd:进入 退出 目录pwd :确定当前所在目录cat:可以…