iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >【python3】任务分配问题
  • 842
分享到

【python3】任务分配问题

分配 2023-01-31 01:01:00 842人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

一、实验目的 问题描述:N个人分配N项任务,一个人只能分配一项任务,一项任务只能分配给一个人,将一项任务分配给一个人是需要支付报酬,如何分配任务,保证支付的报酬总数最小。假设N=5,每个人工作和报酬之间的关系如下表所示,求解该问

一、实验目的

问题描述:N个人分配N项任务,一个人只能分配一项任务,一项任务只能分配给一个人,将一项任务分配给一个人是需要支付报酬,如何分配任务,保证支付的报酬总数最小。假设N=5,每个人工作和报酬之间的关系如下表所示,求解该问题的最优解
表1.1 任务分配
work1 work2 work3 work4 work5
person1 90 75 75 80 60
person2 35 85 55 65 48
person3 125 95 90 105 100
person4 45 110 95 105 98
person5 76 64 57 88 90

二、实验要求

(1)做好实验预习
(2)独立完成实验
(3)撰写实验报告

三、实验题目

本实验由于要求较少,只是寻求最优解,因此采用简单的方法。

四、实验环境

本文的编程环境为Ubantu16.04。
本文的编程语言python3.7。

五、实验分析与设计思路

本实验采用的是矩阵的方式进行计算,但是其中包含了列表的计算方法,矩阵的相乘。
主要采用的程序:
np.array([])生成一个想要的
数组 包括列向量,和行向量。
b=numpy.array([b]).T 行向量转成列向量。
a.dot(b) 向量的乘法。
a*b 只是对应相乘不是矩阵的乘法。
a[[1,2],:]=a[[2,1],:] 矩阵的一二两行对调。
左乘单位行向量再乘以已知矩阵再乘以变换矩阵再乘以单位列向量。

六,程序源码

#本实验要求计算利润的最小值杠杠简单
#本次实验打算采用矩阵的方式,不懂勿扰
#np.array([])生成一个想要的数组 包括列向量,和行向量
#b=numpy.array([b]).T 行向量转成列向量
#a.dot(b) 向量的乘法
#a*b	只是对应相乘不是矩阵的乘法
#a[[1,2],:]=a[[2,1],:]  矩阵的一二两行对调
#左乘单位行向量再乘以已知矩阵再乘以变换矩阵再乘以单位列向量
#========================================================================
#智能优化算法---计算工作分配方案(原创)
#作者:Vince
#版本号:1.0
#创作日期:2018.10.31
#如需转载,请电联.
#耗时:4h
#=========================================================================

import random
import math
import numpy as np
import copy
import numpy as np
import matplotlib.pyplot as plt

class Min(object):
	def __init__(self,newList = [],n=5):
		self.newList = newList #初始列表工作的选择
		self.diag = np.identity(5) #生成一个五维单位矩阵
		self.dhxl = np.array([1,1,1,1,1]) #单位行向量
		self.dlxl = np.array([[1],[1],[1],[1],[1]])#单位列向量
		self.value = 0#每一次的报酬
		self.bestvalue = 100000 #每一次初始种群的最佳报酬
		self.bestchoice = np.identity(5) #每一次的初始种群的最佳方案
		self.empty = [[-1,-1]] #禁忌表
		self.n=n #人数或工作的量
		self.num = (((self.n-1)+1)*4/2) #计算循环次数
		self.bestdiag=np.identity(5)

	def Pso(self):
		self.empty = [[-1,-1]]
		self.diag = self.bestdiag
		self.value = self.bestvalue 
		i = 0
		while i < 10:		
			index1 = random.randint(0,4) #生成初始种群需要互换的两行
			index2 = random.randint(0,4)			
			if (index1,index2)!=self.empty[-1] and (index2,index1)!=self.empty[-1] and index1!=index2:#比对禁忌表中是否存在			
				self.empty.append((index1,index2))#将互换两行的行号放入禁忌表
				self.diag[[index1,index2],:] = self.diag[[index2,index1],:]#将两行互换
				self.value = self.Cul(self.diag)#计算报酬				
				if self.value < self.bestvalue:#
					self.bestvalue = self.value
					self.bestdiag = self.diag
					self.bestchoice = self.newList*self.bestdiag
				i += 1
		# print(self.empty)				

	def Cul(self,diag):						
		diag = self.newList*diag		
		diag = self.dhxl.dot(diag)
		value = diag.dot(self.dlxl)
		return value

	def getValue(self):#返回局部最佳值
		return self.bestvalue

	def  getchoice(self):#返回局部最佳方案
		return self.bestchoice		

def main(turn):	
	newList = np.array([[90,75,75,80,60],[35,85,55,65,48],[125,95,90,105,100],[45,110,95,105,98],[76,64,57,88,90]])
	num = 5	
	tbv = []
	tbc = []
	i=0
	min = Min(newList,num)	
	while i<turn:						
		min.Pso()
		value = min.getValue()
		tbv.append(value)
		choice = min.getchoice()
		tbc.append(choice)
		print('这是第%d次选择'%(i+1))
		print('报酬的最小值:%d'%value)
		print('最佳选择为:')
		print(str(choice))		
		i += 1
	# print('\n')
	
	nb=copy.deepcopy(tbv)

	nb.sort() #将所有的局部最佳值进行排序
	
	i = 0
	while i<turn:
	 	if tbv[i][0] == nb[0][0]:
	 		break
	 	i += 1 
	print('全局报酬最优解:%d'%tbv[i])
	print('最佳选择为:')
	print(str(tbc[i]))
	return tbv[i][0]
# main(10)

def psoPlot():
	x = []
	y = []
	i=1
	while i< 50:
		tc = main(i)
		#x轴 y轴
		x.append(i)
		y.append(tc) 
		print(i)
		i += 1
	#创建绘图对象,figsize参数可以指定绘图对象的宽度和高度,单位为英寸,一英寸=80px
	plt.figure(figsize=(8,8))
	#在当前绘图对象进行绘图(两个参数是x,y轴的数据)
	plt.plot(x, y, linewidth = '1', label = "test",color='#054E9F', linestyle=':', marker='|')
		 
	plt.xlabel("time(s)") #X轴标签
	plt.ylabel("value(m)") #Y轴标签
	plt.title("A simple plot") #标题
	#保存图象
	# plt.savefig("easyplot.png")
	plt.legend()
	plt.show()

psoPlot()

七,运行结果

在这里插入图片描述

八,程序原图

在这里插入图片描述

--结束END--

本文标题: 【python3】任务分配问题

本文链接: https://www.lsjlt.com/news/184161.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 【python3】任务分配问题
    一、实验目的 问题描述:N个人分配N项任务,一个人只能分配一项任务,一项任务只能分配给一个人,将一项任务分配给一个人是需要支付报酬,如何分配任务,保证支付的报酬总数最小。假设N=5,每个人工作和报酬之间的关系如下表所示,求解该问...
    99+
    2023-01-31
    分配
  • 如何解决Go语言中的并发任务的任务分配和负载均衡问题?
    如何解决Go语言中的并发任务的任务分配和负载均衡问题?在Go语言中,协程(Goroutine)是一种轻量级的线程,可以更高效地处理并发任务。然而,当面临大量的并发任务时,如何合理地分配任务并实现负载均衡,就成为一个很重要的问题。本文将介绍一...
    99+
    2023-10-22
    并发任务:并发 任务分配:分配 负载均衡:均衡
  • 分布式任务调度xxl-job问题解决
    目录前言xxl-job简介功能如下快速入门2.1 初始化“调度数据库”2.2 编译源码2.3 配置部署“调度中心”2.4 配置部署&l...
    99+
    2024-04-02
  • python3中input的问题
    在python3中只有input而没有像python2中分类为raw_input和input 所以在python3中要使用整形的话  就要 使用 int() 例如 num=int(input()) 这样才不会报错,TypeError: ...
    99+
    2023-01-31
    input
  • Python3的编码问题
    ​介绍Python3中的编码问题前,第一个段落对字节、ASCII​与Unicode与UTF-8等进行基本介绍,如果不对这几种编码犯头晕,可直接跳过。 ASCII​与Unicode与UTF-8与GBK 首先从老大哥说起。跟很多人一样,...
    99+
    2023-01-31
  • 如何解决分布式任务调度xxl-job问题
    这篇文章主要为大家展示了“如何解决分布式任务调度xxl-job问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决分布式任务调度xxl-job问题”这篇文章吧。xxl-job简介XXL-J...
    99+
    2023-06-29
  • Schedule定时任务在分布式产生的问题详解
    目录正文一、搭建基本环境二、问题::执行时间延迟和单线程执行三、为什么会出现上述问题?四、解决方式4.1、修改配置文件4.2、执行逻辑改为异步执行4.3、异步定时任务4.4、小结五、...
    99+
    2022-11-13
    Schedule定时任务分布式 Schedule 定时任务
  • python3安装解决ssl问题
    1 安装python3.6可能使用的依赖 yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel gcc gcc-...
    99+
    2023-01-31
    ssl
  • Python3下map函数的问题
    今天在群里有人问题,他的Python程序在家里运行好好的,但在公司一运行,就出问题了,查来查去查不出来,于是我就把他的程序调转过来看了一下,发现又是Python2.7与Python3的问题。代码是做了一个可定义任意位数的水仙花数函数def ...
    99+
    2023-01-31
    函数 map
  • Python3实现汉诺塔问题
    Python3实现汉诺塔问题一、思路二、Python3代码实现三、总结四、参考资料 总结归纳为以下3步: 把x上的n-1个盘子借助z,移动到y上 把x上最下面的盘子移动到z上 最后把y上的n-1个盘子借助x移动到,z上,大功告...
    99+
    2023-01-31
    汉诺
  • 如何解决Go语言中的并发任务的分布式任务队列和任务调度策略问题?
    如何解决Go语言中的并发任务的分布式任务队列和任务调度策略问题?引言:在分布式系统中,任务的分发和调度是一个关键问题。在Go语言中,通过使用并发技术可以有效地管理和执行任务。本文将介绍如何使用分布式任务队列和任务调度策略来解决Go语言中的并...
    99+
    2023-10-22
    任务调度 分布式任务队列 并发任务
  • VSCODE+python3中文乱码问题
    被这个问题困扰了好久。各种百度各种尝试。最后在知乎找到了答案。 修改task.json,添加option那一坨: { "version": "0.1.0", "command": "python", "i...
    99+
    2023-01-31
    乱码 中文 VSCODE
  • Java定时任务选型及改造问题的示例分析
    这篇文章主要为大家展示了“Java定时任务选型及改造问题的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java定时任务选型及改造问题的示例分析”这篇文章吧。一、项目目前定时任务现状 ...
    99+
    2023-06-29
  • openstack vxlan模式IP分配有问题
    在OpenStack中使用VXLAN模式进行网络虚拟化时,IP分配的问题可能包括以下几个方面:1. IP地址冲突:在VXLAN模式下...
    99+
    2023-10-11
    openstack
  • Python3定时任务怎么设置
    在Python中,可以使用`schedule`模块来设置定时任务。以下是一个示例代码,演示如何每隔一分钟打印一次当前时间:```py...
    99+
    2023-08-17
    Python3
  • C语言malloc分配问题详解
    目录前言一、malloc是什么?1.1malloc定义1.2malloc函数含义二、malloc的使用2.1添加头文件2.2malloc和free2.3malloc使用注意三、mal...
    99+
    2024-04-02
  • quartz任务阻塞问题怎么解决
    解决Quartz任务阻塞问题的方法有以下几种:1. 增加线程池大小:默认情况下,Quartz使用一个线程执行任务。如果任务较多或者任...
    99+
    2023-09-18
    quartz
  • Python3中的多行输入问题
    目录python3的多行输入问题python实现多行输入总结python3的多行输入问题 因为在OJ上做编程,要求标准输入,特别是多行输入。特意查了资料,自己验证了可行性。 if _...
    99+
    2023-05-19
    Python3多行输入 Python3输入 Python3输入多行
  • SpringBoot配置ShedLock分布式定时任务
    什么是ShedLock ShedLock是一个在分布式环境中使用的定时任务框架,用于解决在分布式环境中的多个实例的相同定时任务在同一时间点重复执行的问题,解决思路是通过对公用的数据...
    99+
    2024-04-02
  • python3 做cgi 中文乱码问题
    开头加入以下代码解决import codecs, sys sys.stdout = codecs.getwriter('utf8')(sys.stdout.buffer)...
    99+
    2023-01-31
    乱码 中文 cgi
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作