`
bbsunchen
  • 浏览: 231807 次
  • 性别: Icon_minigender_1
  • 来自: 天朝帝都
社区版块
存档分类
最新评论

动态规划算法解并行任务调度问题

阅读更多

感谢晶星童鞋的讨论

 

啥也不说,上题目:

用两台处理机A和B处理个作业。设第i个作业交给机器A处理时所需要的时间是ai,若由机器B来处理,则所需要的时间是bi。现在要求每个作业只能由一台机器处理,每台机器都不能同时处理两个作业。设计一个动态规划算法,使得这两台机器处理完这个作业的时间最短(从任何一台机器开工到最后一台机器停工的总的时间)。

 

我一开始以为只有第一个作业完成后,才能进行第二个作业呢,后来才意识到是并行。

 

啥也不说,上代码,C++描述。

#include<iostream>
#include<string>
using namespace std;
int findMax(int a, int b)
{
	if(a > b)
	{
		return a;
	}else
	{
		return b;
	}
}
int findMin(int a, int b)
{
	if(a < b)
	{
		return a;
	}else
	{
		return b;
	}
}
int main()
{
	int N = 6;
	int a[] ={ 2, 5, 7, 10, 5, 2 };
	int b[6] = { 3, 8, 4, 11, 3, 4 };
	int least[6] = {0}; 
	string result[6] = {""};  
	for (int i = 0; i < N; i++)
	{
		least[i] = 99;
	}

	int aSum = 0, bSum = 0;
	for (int i = 0; i < N; i++)
	{
		aSum += a[i];
		bSum += b[i];
	}


    int timeA[6][1000];
	int timeB[6][1000];
	int timeMax[6][1000];
	char who[6][100];
	char tempRlt[100];

	for (int i = 0; i <= a[0]; i++)
	{
		timeA[0][i] = i;
		if (i < a[0])
		{
			timeB[0][i] = b[0];
			who[0][i] = 'b';
		}
		else
		{
			timeB[0][i] = 0;
			who[0][i] = 'a';
		}
		timeMax[0][i] = findMax(timeA[0][i], timeB[0][i]);
	}

	if (a[0] <= b[0])
	{
		least[0] = a[0];
		tempRlt[0] = 'a';
	}
	else
	{
		least[0] = b[0];
		tempRlt[0] = 'b';
	}
	result[0] = string(tempRlt);         

	for (int k = 1; k < N; k++)
	{
		int tempSum = 0;
		for (int temp = 0; temp <= k; temp++)
		{
			tempSum += a[temp];
		}
		for (int i = 0; i <= tempSum; i++)
		{
			timeA[k][i] = i;
			if (i < a[k])
			{
				timeB[k][i] = timeB[k - 1][i] + b[k];
				who[k][i] = 'b';
			}
			else
			{
				if ((timeB[k - 1][i] + b[k]) <= timeB[k - 1][i - a[k]])
				{
					timeB[k][i] = timeB[k - 1][i] + b[k];
					who[k][i] = 'b';
				}
				else
				{
					timeB[k][i] = timeB[k - 1][i - a[k]];
					who[k][i] = 'a';
				}
			}
			timeMax[k][i] = findMax(timeA[k][i], timeB[k][i]);
		}

		for (int i = tempSum + 1; i < aSum; i++)
		{
			timeA[k][i] = tempSum;
			timeB[k][i] = 0;
		}
		int flag = 0;
		for (int i = 0; i <= tempSum; i++)
		{
			if (timeMax[k][i] > 0 && timeMax[k][i] < least[k])
			{
				least[k] = timeMax[k][i];
				flag = i;
			}
		}
		tempRlt[k] = who[k][flag];
		for (int i = k; i > 0 && flag > 0; i--)
		{
			if (tempRlt[i] == 'a')
			{
				flag -= a[i];
				tempRlt[i - 1] = who[i - 1][flag];

			}
			if (tempRlt[i] == 'b')
			{
				tempRlt[i - 1] = who[i - 1][flag];
			}
		}

		result[k] = string(tempRlt);
	}  

	cout << "完成" << N <<"任务顺序为:" << result[N-1] << " 时间为" <<least[N-1] << endl;

}
 
分享到:
评论

相关推荐

    独立任务最优调度问题

    独立任务最优调度问题在计算机科学领域,特别是在操作系统和并行计算中是一个重要的研究主题。它主要涉及如何有效地分配一系列不依赖于彼此的计算任务到有限的资源上,以实现最短的总体完成时间或者最大化系统效率。...

    山东科技大学算法设计与分析实验4:独立任务最优调度问题 源.cpp+报告

    在本实验中,我们主要探讨的是“独立任务最优调度”问题,这是一个常见的计算机科学问题,尤其是在操作系统、任务调度和资源管理领域。独立任务是指每个任务的执行不依赖于其他任务,可以并行处理,目标是优化某些...

    人工蜂群算法在并行测试任务调度中的应用

    【并行测试任务调度的数学模型】通常会考虑任务之间的依赖关系、资源约束、优先级等因素,通过建立如整数规划、网络流模型或其他形式的数学模型来描述问题。人工蜂群算法利用其全局搜索能力,能有效地处理这些模型中...

    任务调度问题算法实验

    有些问题可能需要更复杂的算法,如动态规划或回溯搜索,以获得全局最优解。在实际应用中,还需要考虑其他因素,如实时性、公平性和可预测性,这可能会引入更复杂的调度策略。 总的来说,这个实验提供了一个了解和...

    最佳调度问题,假设有n个任务由k个可并行工作的机器完成

    7. **分布式调度算法**:在大规模系统中,如云计算环境,任务调度可能需要分布式算法,如MapReduce模型,它将任务分解为小块,然后在多台机器上并行执行。 为了实现这些策略,编程中可能会使用如`ex(最佳调度问题)...

    基于新型人工蜂群算法的分布式不相关并行机调度.pdf

    在本文中,作者刘美瑶和雷德明提出了一种新型人工蜂群算法来解决考虑预防性维修的分布式不相关并行机调度问题,并且通过划分种群来实现并行搜索。具体而言,算法将整个种群划分为一个引领蜂群和三个跟随蜂群,每个...

    装配线调度问题实现(C语言实现)

    例如,可以使用数组来表示各工作站的当前任务,链表来存储待处理任务,队列来管理工作流,堆来优化优先级高的任务调度。 2. 算法设计:常见的调度算法包括先入先出(FIFO)、短作业优先(SJF)、优先级调度、最晚截止...

    一种面向复杂地理空间栅格数据处理算法并行化的任务调度方法.pdf

    为了缩短这些算法的运行时间,研究者们提出了一种面向复杂地理空间栅格数据处理算法并行化的任务调度方法。 任务调度是并行计算中的关键环节,它主要负责分配计算任务到不同的计算单元上,以充分利用硬件资源并提高...

    改进遗传算法在云计算任务调度中的应用.pdf

    遗传算法是一种模拟自然选择和遗传学机制的搜索优化算法,它具有全局搜索能力强、易于并行处理、适用范围广等优点,被广泛应用于各种优化和搜索问题。然而,传统的遗传算法也存在一些不足,如局部搜索能力差、收敛...

    并行图论算法,并行图论算法

    并行图论算法广泛应用于网络路由、社交网络分析、生物信息学、物流规划、云计算调度等多个领域。例如,Google的PageRank算法就是一种基于图的并行算法,用于评估网页的重要性。 总结来说,並行图论算法通过充分利用...

    Storm下基于最佳并行度的贪心调度算法.pdf

    【Storm下基于最佳并行度的贪心调度算法】是一种针对开源分布式实时计算框架Storm的优化策略,旨在解决默认调度策略可能导致的任务处理延迟和吞吐量降低问题。在Storm中,任务并行度的配置对系统性能有显著影响,不...

    基于遗传算法的任务调度优化研究

    在多任务调度问题中,通常涉及到多个并行任务和一个共享资源库。这些任务之间不仅需要竞争有限的资源,还需要满足一定的依赖关系。例如,某些任务必须在其他任务完成后才能开始执行。为了更好地描述这一场景,本研究...

    融合粒子群与蚁群的云计算任务调度算法.pdf

    通过借鉴自然界中群居动物的行为模式,并结合云计算的特点进行算法改进,这种任务调度算法提供了一种新的视角来解决云环境下任务调度问题。研究者们可以根据这一算法的原理和效果,进一步深入研究,以期望在实际的...

    多机调度问题

    在计算机科学领域,多机调度问题是一个典型的优化问题,它涉及到如何有效地分配多个处理单元(如计算机、服务器或处理器)的任务,以最大化效率或最小化完成所有任务的时间。本问题通常出现在并行计算、分布式系统...

    并行机生产与具有等待时间限制的成批运输协调调度问题

    针对并行机生产与成批运输协调调度问题,研究者通常会采用以下几种方法来寻找最优解或近似最优解: 1. **数学建模**:建立相应的数学模型,将问题抽象为一个优化问题。例如,可以使用线性规划、整数规划等方法来...

    基于问题性质的分布式低碳并行机调度算法研究.docx

    分布式低碳并行机调度问题(Distributed Low-Carbon Parallel Machine Scheduling Problem, DLCPMSP)是当前制造领域中一个重要的研究课题,它涉及到如何在多个工厂或生产线之间合理分配任务,以最小化总延迟时间和总...

    使用求解器求解车间调度问题、带阻塞的车间调度问题

    在车间调度问题中,Cplex可以用来构建并求解复杂的数学模型,如0-1规划或线性规划,将任务分配和时间窗口约束转化为数学公式,寻找最优解。 2. **or-tools**:这是Google开源的一个优化工具包,支持多种类型的优化...

    多机调度问题C++语言解决的源代码

    - 考虑到复杂性,实际的多机调度代码可能需要采用贪心、动态规划或近似算法,以在可接受的时间内找到较好的解。 - 调度器可能需要定期重新评估和调整计划,以应对作业的动态变化和机器的资源可用性。 总结来说,...

    并行计算最优解

    "并行计算最优解"这个标题所指的,是一个关于如何在并行计算环境下优化任务调度的问题,其目标是寻找一种策略,使得所有任务在最短时间内得以完成。 描述中提到的最佳调度问题是一个经典的计算机科学问题,也被称为...

Global site tag (gtag.js) - Google Analytics