指派问题的求解

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

实验目的:学会使用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,一经查实,立即删除!

相关文章

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

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

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

一、建设背景 根据国家统计局的数据&#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工程师 精选面试…

计算机网络-以太网小结

前导码与帧开始分界符有什么区别? 前导码--解决帧同步/时钟同步问题 帧开始分界符-解决帧对界问题 集线器 集线器通过双绞线连接终端, 学校机房的里面就有集线器 这种方式仍然属于共享式以太网, 传播方式依然是广播 网桥: 工作特点: 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;将整个游戏板上的所有方块…

DevOps赋能:优化业务价值流的实战策略与路径(下)

下篇&#xff1a;加速工作项流动与持续改进优化 —— 跨越差距&#xff0c;迈向卓越交付 在上篇中&#xff0c;我们已经深入探讨了看板方法的四大核心实践&#xff0c;它们共同致力于实现“顺畅且高质量地交付价值”的终极目标。然而&#xff0c;理想与现实之间往往存在一定的…

使用带有令牌认证的 Jupyter Notebook 服务器

当你不想在默认浏览器打开Jupyter Notebook,但是在其他浏览器打开http://localhost:8890/lab或者http://localhost:8889/tree&#xff0c;却显示 Token authentication is enabled&#xff0c;如下图 可以按以下步骤操作&#xff1a; 获取令牌&#xff1a;在启动 Jupyter Note…

FRIENDLYARM Tiny6410 superboot烧写进sd卡教程

友善之臂真的垃圾&#xff0c;pdf乱不说&#xff0c;资料在哪也不说&#xff0c;没有视频教程&#xff0c;就染你自己去一堆资料里找&#xff0c;** superboot在资料B盘tooles-image里 注意有些朋友scan不到sd卡是因为没有给这个软件开启管理员模式&#xff0c;他没权限去扫描…

宝藏虚拟化学习资料大全

最近发现了关于虚拟化的宝藏资料&#xff0c;瑞斯拜&#xff01;原文链接如下&#xff1a; 500篇关于虚拟化的经典资料&#xff0c;含CPU虚拟化&#xff0c;磁盘虚拟化&#xff0c;内存虚拟化&#xff0c;IO虚拟化。 目录 &#x1fa90; 虚拟化基础 &#x1f343; 虚拟化分类&…

C++模拟真人动态生成鼠标滑动路径

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序&#xff0c;它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言&#xff0c;原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势&#xff1a; 模拟…

【Redis实践】使用zset实现实时排行榜以及一些优化思考

文章目录 1.概述2.zset的基本概念说明2.1.数据结构说明2.2.zset做排行榜的指令 3. 项目中的实践3.1.RedisTemplate实现排行榜3.2.可能存在的问题及解决方案3.2.1. 限制成员的数量3.2.2.保留当前分数与最高分数3.2.3.批量操作成员分数&#xff0c;减少并发 4.总结 1.概述 我们在…

C++_STL_xx_番外01_关于STL的总结(常见容器的总结;关联式容器分类及特点;二叉树、二叉搜索树、AVL树(平衡二叉搜索树)、B树、红黑树)

文章目录 1. 常用容器总结2. 关联式容器分类3. 二叉树、二叉搜索树、AVL树、B树、红黑树 1. 常用容器总结 针对常用容器的一些总结&#xff1a; 2. 关联式容器分类 关联式容器分为两大类&#xff1a; 基于红黑树的set和map&#xff1b;基于hash表的unorder_set和unorder_ma…

【LwIP源码学习4】主线程tcpip_thread

前言 本文对lwip的主要线程tcpip_thread进行分析。 正文 tcpip_thread是lwip最主要的线程&#xff0c;其创建在tcpip_init函数中 sys_thread_new(TCPIP_THREAD_NAME, tcpip_thread, NULL, TCPIP_THREAD_STACKSIZE, TCPIP_THREAD_PRIO);tcpip_init函数被TCPIP_Init函数调用。…