贪心算法解决多机调度问题

这篇具有很好参考价值的文章主要介绍了贪心算法解决多机调度问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、问题描述

        设有N个独立的作业{1,2,...,n},由M台相同的机器进行加工处理。作业i所需时间为Ti.约定:任何作业可以在任何一台机器上加工,处理单位完工前不允许中断处理,人和作业不能拆分成更小的作业 。要求给出一种作业调度方案,使所给的N个作业,在尽可能短的时间内有M台机器加工处理完成。

要求:随机生成N个作业相关信息,并计算由M台机器处理的最短时间

 二、算法选择与分析

        用贪心算法解决多机调度问题。

        贪心算法只考虑眼前利益,不通盘考虑问题的所有可能,每一步做出当时看起来最佳的选择(局部最优选择)利用贪心算法求解的问题往往具有两个重要的特性,贪心选择性质和最优子结构性质。如果满足这两个性质,就可以使用贪心算法了。

        所谓贪心选择,是指原问题的整体最优解,可以通过一系列局部最优的选择得到应用。同一规则,将原问题变为一个相似的,但规模更小的子问题   ,而后的每一步都是当前最佳的选择。这种选择依赖于自己做出的选择,但不依赖于未做出的选择。运用贪心策略解决的问题,在程序的运用过程中无回溯过程。

        最优子结构,当一个问题的最优解包含其子问题的最优解释,称此问题具有最优子结构性质问题的最优子结构性质,是该问题是否可用贪心算法求解的关键。

三、设计思路

         作业项数为你n,机器数为m。若n<=m,则一台机器随机分配一项作业,最长作业时间为机器所用最少时间。若n>m,则使用贪心算法寻求最佳解决方案,如下:

假设:一共有七项作业,解决时间分别为{5,4,16,14,3,2,6} 一共有三台机器,M1,M2,M3

        首先,按照作业完成时间将作业从大到小排序,为{16,14,6,5,4,3,2}然后分别将16,14,6安排在M1,M2,M3三台机器上,然后进行比较。16,14,6中6最小,所以将下一项作业5安排在M3机器上。5+6=11。再次将更新后的三台机器进行比较并决出最小项,依此类推 。

        

贪心算法解决多机调度问题

四、代码实现文章来源地址https://www.toymoban.com/news/detail-505969.html

#include<iostream> 
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
 
using namespace std;
#define N 1000
#define M 3 
int s[M] = { 0, 0, 0 };
 
 
//求出目前处理作业的时间和 最小的机器号 
int min(int m){
int min = 0;
int i;
for (i = 1; i<m; i++){
if (s[min]>s[i]){
min = i;
}
}
return min;
}
//求最终结果(最长处理时间) 
int max(int s[], int num){
int max = s[0];
for (int i = 1; i<num; i++){
if (max<s[i])
max = s[i];
}
return max;
}
//机器数大于待分配作业数 
int setwork1(int t[], int n){
int i = 0;
for (; i<n; i++){
s[i] = t[i];
}
int ma = max(s, N);
return ma;
}
//机器数小于待分配作业数 
int setwork2(int t[], int n){
int i;
int mi = 0;
for (i = 0; i<n; i++){
mi = min(M);
printf("\n") ;
cout << "接下来由" << mi+1 << "号机器处理任务" << i + 1 << endl;
s[mi] = s[mi] + t[i];
}
int ma = max(s, M);
return ma;
}
int main()  //DEV中是int,vc++6.0中是void
{
	//随机生成处理时间 
	int i;
	int t[N];
	srand((unsigned)time(NULL));
	for(i = 0;i<N;i++)
	{
  		t[i] =rand()%100+1;
  		printf("%d   ",t[i]);
	}	
	

		
		
	//int t[N] = { 16, 14, 6, 5, 4, 3, 2 };//处理时间按从大到小排序 
	int maxtime;
	if (M >= N)
		maxtime = setwork1(t, N);
	else
		maxtime = setwork2(t, N);
	printf("%d台机器中",M);
	cout << "最多耗费时间为:" << maxtime << endl;
	printf("由%d台机器",M);
	cout << "处理的最短时间为:" << maxtime << endl;
	
}

到了这里,关于贪心算法解决多机调度问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 算法 主持人调度-(双指针+贪心)

    牛客网: BM96 题目: 一个主持人只能参加一个活动,至少需要多少主持人 思路: 对start, end排序从小到大;初始化指针l, r = 0, 0;start[r]= end[l]时需要累加人数同时r++,否则l++,r++同时移动;直至不再满中ln r n 代码:

    2024年02月07日
    浏览(37)
  • <算法>贪心策略设计并解决会场安排问题

    🎉  每个不曾起舞的日子都是对生命的辜负 🎉 写在前面 期末考试邻近,为了更好的应对《算法设计与分析》这门课程,我把书上以及老师讲过的案例都详细的做一个重现及解剖,让你熟记每一个潜在的考点,希望能给大家帮助。 🎉 目录 问题描述  贪心策略  算法设计

    2024年02月08日
    浏览(93)
  • 贪心算法解决背包问题和动态规划解决0-1背包问题(c语言)

    运行结果如下: 运行结果如下: 总结: 贪心算法: 每一步都做出当时看起来最佳的选择,也就是说,它总是做出局部最优的选择。 贪心算法的设计步骤: 对其作出一个选择后,只剩下一个子问题需要求解。 证明做出贪心选择后,原问题总是存在最优解,即贪心选择总是安

    2024年02月04日
    浏览(56)
  • 基于遗传算法解决流水车间调度问题

    问题描述 n 个工件要在 m 台机器上加工,每个工件需要经过 m 道工序,每道工序要求不同的机器,n 个工件在 m 台机器上的加工顺序相同。工件在机器上的加工时间是给定的,设为 t i j ( i = 1.... , n ; j = 1 , . . . , m ) t_{ij}(i = 1....,n; j = 1,...,m) t ij ​ ( i = 1.... , n ; j = 1 , ... , m ) 问

    2024年02月07日
    浏览(44)
  • 遗传算法GA解决混合流水车间调度问题HFSP

    混合流水车间调度问题(HFSP)是传统流水车间调度问题(FSP)的拓展,本文针对HFSP问题进行描述、建模和求解。 通常模型做如下假设: HFSP符号描述: 决策变量: 主要约束: 优化目标: 本节使用带精英保留的遗传算法GA对HFSP问题进行求解。求解结果如下: 自定义算例如下:

    2024年02月11日
    浏览(50)
  • 湘潭大学 算法设计与分析实验 回溯 动态规划 贪心 模拟退火解决背包问题

    https://download.csdn.net/download/SQ_ZengYX/88620871 测试用例

    2024年02月02日
    浏览(62)
  • 告别手动调度,海豚调度器 3.1.x 集群部署让你轻松管理多机!

    转载自第一片心意 由于海豚调度器官网的集群部署文档写的较乱,安装过程中需要跳转到很多地方进行操作,所以自己总结了一篇可以直接跟着从头到尾进行操作的文档,以方便后续的部署、升级、新增节点、减少节点的相关操作。 JDK:下载JDK (1.8+),安装并配置 JAVA_HOME 环

    2024年04月24日
    浏览(36)
  • Nacos多机部署不同机器间微服务无法调用问题(ip地址设置错误)解决

    我的同一台电脑自己的微服务之间调动是正常的,而且微服务都是正常运行的,但是没法被另一台电脑上的微服务调用:(测试时显示连接超时)  但是服务是正常的:  然后一看服务详情,发现是服务的ip地址变成了虚拟网关的地址:  那么自然另一台机子是连不上的,就

    2024年02月01日
    浏览(40)
  • 【调度算法】并行机调度问题遗传算法

    m台相同的机器,n个工件,每个工件有1道工序,可按照任意的工序为每个工件分配一台机器进行加工 工件 A B C D E F G H I 工件编号 0 1 2 3 4 5 6 7 8 加工时间 4 7 6 5 8 3 5 5 10 到达时间 3 2 4 5 3 2 1 8 6 交货期 10 15 30 24 14 13 20 18 10 设备数目:3 最小化交货期总延时时间 记机器数为 m ,从

    2024年02月05日
    浏览(57)
  • 贪心算法(区间问题)

    有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points ,其中 points[i] = [xstart, xend] 表示水平直径在 xstart 和 xend 之间的气球。你不知道气球的确切 y 坐标。 一支弓箭可以沿着 x 轴从不同点 完全垂直 地射出。在坐标 x 处射出一支箭,若有一个气

    2024年03月11日
    浏览(72)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包