#!/usr/bin/env python3"""Author : Mohit KumarJob Sequencing Problem implemented in python"""from collections import namedtuplefrom typing import Listclass Scheduling:def __init__(self, jobs: List[int]) -> None:"""Assign jobs as instance of class Scheduling"""self.jobs = jobsdef schedule(self, total_jobs: int, deadline: List[int]) -> List[int]:"""Parameteres : total_jobs and list of deadline of jobsReturns : List of jobs_id which are profitable and can be done beforedeadline>>> a = Scheduling([(0, 13, 10),(1, 2, 20),(2, 33, 30),(3, 16, 40)])>>> a.schedule( 3, [3, 4, 5])[(1, 2, 20), (2, 33, 30)]>>> a = Scheduling([(0, 13, 10),(1, 2, 20),(2, 33, 30),(3, 16, 40)])>>> a.schedule( 4, [13, 2, 33, 16])[(1, 2, 20), (2, 33, 30), (3, 16, 40)]"""self.j = [self.jobs[1]]self.x = 2while self.x < total_jobs:self.k = self.j.copy()self.k.append(self.jobs[self.x])self.x += 1if self.feasible(self.k, deadline):self.j = self.k.copy()return self.jdef feasible(self, profit_jobs: List[int], deadline: List[int]) -> bool:"""Parameters : list of current profitable jobs within deadlinelist of deadline of jobsReturns : true if k[-1] job is profitable to us else false>>> a = Scheduling([(0, 13, 10),(1, 2, 20),(2, 33, 30),(3, 16, 40)])>>> a.feasible( [0], [2, 13, 16, 33] )True>>> a = Scheduling([(0, 13, 10),(1, 2, 20),(2, 33, 30),(3, 16, 40)])>>> a.feasible([0], [2, 13, 16, 33] )True"""self.tmp = profit_jobsself.is_feasible = Truei = 0j = 1k = 0while i < len(self.tmp):while j < len(self.tmp):self.index1 = self.jobs.index(self.tmp[i])self.index2 = self.jobs.index(self.tmp[j])j += 1if deadline[self.index1] > deadline[self.index2]:(self.tmp[i], self.tmp[j]) = (self.tmp[j],self.tmp[i],)i += 1while k < len(self.tmp):self.job = self.tmp[k]if self.job in self.jobs:self.jobindex = self.jobs.index(self.job)else:self.jobindex = 0self.dlineval = deadline[self.jobindex]self.ftest = k + 1k += 1if self.dlineval < self.ftest:self.is_feasible = Falsebreakreturn self.is_feasibledef main():job = namedtuple("job", "job_id deadline profit")jobs = [job(0, 0, 0),job(1, 2, 46),job(2, 4, 52),job(3, 3, 30),job(4, 3, 36),job(5, 2, 56),job(6, 1, 40),]# midresult stores jobs in sorting order of deadlinemidresult = []for i in range(len(jobs)):current_job = []current_job.extend((jobs[i].deadline, jobs[i].profit, jobs[i].job_id))midresult.append(current_job)midresult.sort(key=lambda k: (k[0], -k[1]))(deadline, profit, jobs) = map(list, zip(*midresult))scheduling_jobs = Scheduling(jobs)scheduled_jobs = scheduling_jobs.schedule(len(jobs), deadline)print(f"\n Jobs {scheduled_jobs}")finalprofit = []finaldl = []for i, item in enumerate(scheduled_jobs):jobsindex = jobs.index(item)finalprofit.append(profit[jobsindex])finaldl.append(deadline[jobsindex])print(f"\n Profit {finalprofit}")print(f"\n Deadline {finaldl}")if __name__ == "__main__":main()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。