作业调度问题

合集下载

数学建模--车间作业调度问题

数学建模--车间作业调度问题

一、二维背包问题一维背包问题讨论的背包问题只有一种限制,即旅行者所能承受的背包的重量(亦即重量不能超过a (kg ).但是实际上背包除受重量的限制外,还有体积的限制,这就是不但要求旅行者的背包的重量M 不能超过a (kg ),还要求旅行者背包的体积V 不能超过b (m3),我们把这样的问题称为“二维背包问题”。

它的状态变量有两个因素:一个是重量,一个是体积。

二维背包问题是指:对于每件物品,具有两种不同的费用;选择这件物品必须同时付出这两种代价;对于每种代价都有一个可付出的最大值(背包容量)。

问怎样选择物品可以得到最大的价值。

设这两种代价分别为代价1和代价2,第i 件物品所需的两种代价分别为i a 和i b 。

两种代价可付出的最大值(两种背包容量)分别为a 和b 。

物品的价值为i c 。

模型:111max .,1,2,3...ni ii ni i ini i ii c x st a x a b x bx z i n===≤≤∈=∑∑∑例题码头有一艘载重量为30t ,最大容为12×10m 3的船,由于运输需要,这艘船可用于装载四种货物到珠江口,它们的单位体积,重量及价值量见下表:现求如何装载这四种货物使价值量最大。

111max.,1,2,3...ni i ini i ini i ii c x st a x a b x bx z i n===≤≤∈=∑∑∑可用动态规划来解决1.设x i (i=1,2,3,4)分别表示装载这四种货物的重量,2.阶段k :将可装入的货物按1,2,3,…n 排序,每个阶段装一种货物,(共可分为四个阶段)3.状态变量: 1k S +和1k R +,表示在第k 阶段开始时,允许装入的前k 种货物的重量与体积。

状态转移方程:11k k k k k k k kS S a x R R b x ++=-=-()(){}111,max ,j k k j k k j j f S R f S R c x -++=+,表示在不超过重量和体积的前提下,装入前j 中货品的价值。

柔性作业车间调度问题简明分析

柔性作业车间调度问题简明分析

1、编码
1、编码
在遗传算法中,问题的解需要用二进制或十进制的编码来表示。在柔性作业 车间调度问题中,我们可以将生产任务和生产设备分别用二进制或十进制的编码 表示,每个编码对应一个任务或设备。
2、初始种群生成
2、初始种群生成
遗传算法的初始种群是随机的,可以通过随机分配任务和设备来生成。在生 成初始种群时,需要保证每个任务都有对应的设备,每个设备都有对应的任务。
四、结论
四、结论
本次演示提出了一种新型的柔性作业车间调度方法——基于遗传算法的柔性 作业车间调度方法。该方法通过采用遗传算法作为优化算法,能够找到最优的调 度方案,提高生产效率和降低生产成本。通过应用案例的验证,该方法具有很高 的实用价值和推广价值。
谢谢观看
柔性作业车间调度问题简明分 析
01 引言
03 问题分析
目录
02 概念解析 04 技术实现
05 案例分析
07 参考内容
目录
06 总结
引言
引言
在现代化制造业中,柔性作业车间调度问题一直是生产过程中的核心难题之 一。该问题的合理解决有助于提高生产效率、降低成本、增强企业竞争力。本次 演示将对柔性作业车间调度问题进行简要分析,旨在帮助读者更好地理解和解决 这类问题。
结论
结论
本次演示对车间作业调度的技术问题进行了简要的综述。尽管在调度算法、 任务分配和调度优化等方面取得了一定的研究成果,但仍存在许多挑战和需要进 一步探讨的问题。例如,如何针对实际生产环境中的动态变化进行调度优化,
结论
如何综合考虑多个优化目标等问题。此外,随着智能制造技术的发展,如何 将先进的人工智能方法应用于车间作业调度也是一个值得研究的方向。
5、交叉操作

作业调度之最短作业优先算法5例题解析

作业调度之最短作业优先算法5例题解析

作业调度之最短作业优先算法5例题解析例题一、某系统采用不能移动已在主存储器中作业的可变分区方式管理主存储器,现有供用户使用的主存空间100K,系统配有4台磁带机,有一批作业见下表:作业序号进输入井时间要求计算时间需要主存容量申请磁带机数110:0025分钟15K2台210:2030分钟60K1台310:3010分钟50K3台410:3520分钟10K2台510:4015分钟30K2台按计算时间最短者优先算法如下表:我的解释:系统首先装入1、2、4,但1结束时4沿未到达,因此先执行2;2执行完毕后,资源可以分配给3或5,考虑5的时间短优先分配5并执行,执行完5后,主存中只有4已就绪并等待执行,因此开始执行4,执行4的同时系统会将作业3装入主存,最后自然执行作业3;因此最后的顺序是:1\2\5\4\3作业序号进输入井时间进入主存时间开始计算时间结束计算时间周转时间解释110:0010:1010:00102525此时输入井中只有一个作业且满足资源要求,因此被选中运行。

2102010:2010:2510:5535作业2到达输入井,满足资源要求,装入主存,等到作业1运行完毕进入运行。

510:4010:5510:5511:1030由于作业3要求主存空间无法满足,因此作业4先行一步装入主存,当作业2让出处理器的同时,作业5满足资源要求进入主存就绪。

根据算法作业5先进入处理器运行最后作业3装入主存并运行平均周转时间:(25+35+30+55+70/5=43分钟 [分析]解答本题时应注意如下几个问题:第一,系统采用的是多道程序设计技术,但没有限定并行工作的道数,因此, 只要当前尚未分配的资源可以满足在输入井中等待的某些作业的要求时,作业 调度可以按照给定的算法从中选择一个或多个作业装人主存储器;第二,采用可变分区方式管理主存储器,但没给出主存空间的分配算法,因而,只要有合适的空间就可分配,题中还规定可用移动技术来合并分散的空闲区; 第三,对磁带机采用静态分配;第四,进程调度采用可抢占的最高优先级调度算法,即对已被装人主存储器的作业而言优先级高的作业可抢占处理器执行;第五,虽然作业需要使用磁带机,但题意中已提示忽略磁带机和调度所花的时问,所以,解题时不必考虑外围设备的启动二八D 中断等复杂情况,只需把它们当作纯计算型的作业; 第六,由于没有规定什么时候开始进行作业调度,故在一般情况下只要输入井中有等待处理的作业就可按选定的算法去选择满足必要条件的作业。

分支限界法-批处理调度问题

分支限界法-批处理调度问题

【分支限界法】批处理作业调度问题问题描述给定n个作业的集合J1,J2,…,J。

每个作业必须先由机器1处理,然后由机器2处理。

作业Ji需要机器j的处理时间为tji。

对于一个确定的作业调度,设Fji是作业i在机器j上完成处理的时间。

所有作业在机器2上完成处理的时间和称为该作业调度的完成时间和。

批处理作业调度问题要求对于给定的个作业,制定最佳作业调度方案,使其完成时间和达到最小例:设n=3,考虑以下实例:作业作业作业这3个作业的6种可能的调度方案是1,2,3;1,3,2;2,1,3;2,3,1;3,1,2;3,2,1;它们所相应的完成时间和分别是19,18, 20,21,19, 19。

易见,最佳调度方案是1,3,2,其完成时间和为18。

限界函数批处理作业调度问题要从n个作业的所有排列中找出具有最小完成时间和的作业调度,所以如图,批处理作业调度问题的解空间是一颗排在作业调度问相应的排列空间树中,每一个节点E都对应于一个已安排的作业集,……〈。

以该节点为根的子树中所含叶节点的完成时间和可表示为:设|M|=r,且L是以节点E为根的子树中的叶节点,相应的作业调度为{pk,k=1,2,……1其中pk是第k个安排的作业。

如果从节点E到叶节点L的路上,每一个作业pk在机器1上完成处理后都能立即在机器2上开始处理,即从p r+1开始,机器1没有空闲时间,则对于该叶节点L有:Z七=2 [耳心+(〃-左+1居网+%热]=d£叩+1i更M注:(n-k+1)tipk因为是完成时间和,所以,后续的n-k+1)个作业完成时间和都得算上ipk。

如果不能做到上面这一点,则si只会增加,从而有:下;, 一」。

类似地,如果从节点E开始到节点L的路上,从作业p r+1开始,机器2没有空闲时间,则:日25;E [max(勺,/+呻4) + ("4 + 1H热]k=r+l冈同理可知,s2是三;•的下界。

由此得到在节点E处相应子树中叶节点完成时间和的下界是:/吓 J+maxf3}ieM注意到如果选择Pk,使tipk在k>=r+1时依非减序排列,S1则取得极小值。

双机流水作业调度问题(Johnson算法)

双机流水作业调度问题(Johnson算法)

双机流⽔作业调度问题(Johnson算法)问题定义:双机流⽔作业调度:总共有n个作业,作业i分为两个内容,需要按顺序先后在机器A和机器B上完成,分别需要时间a i,b i来完成,⼀台机器只能同时进⾏⼀项作业,问完成所有作业所需的最⼩时间。

多机流⽔作业调度:⼀个作业需要在⼤于两台机器上先后完成,是NP-hard问题。

解法:问题就是求最佳作业序列。

设前i项作业所需的时间为C i,可以得出以下式⼦c i=a1+b1,i=1 max c i−1,∑i j=1a j+b i,2≤i≤n可以证明,对于相邻两项i和j,如果min(a i,b j)<min(a j,b i)则i项放前⾯更优。

将a i和b i的关系分为<,=,>三类,可以得到如下排列顺序:1.当a i<b i,a j<b j时,a i≤a j,应该按a升序排序2.当a i=b i,a j=b j时,随意排列。

3.当a i>b i,a j>b j时,b i≥b j,应该按b降序排序。

同样可以证明,a i<b i的项应该排在最前,然后是a i=b i的项,最后是a i>b i的项。

代码:{{}//P1248,给定n,ai,bi,求最⼩⽤时和对应序列#include <bits/stdc++.h>using namespace std;const int maxn=1e5+5;typedef long long ll;struct node{int a,b,d,id;bool operator<(const node &v)const {if(d!=v.d)return d<v.d;else if(d==-1){return a<v.a;}else{return b>v.b;}}}p[maxn];int main () {int n;scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&p[i].a);for(int i=1;i<=n;i++){scanf("%d",&p[i].b);p[i].id=i;int cha=p[i].a-p[i].b;if(cha==0)p[i].d=0;else p[i].d=cha<0?-1:1;}sort(p+1,p+1+n);ll ans=0,dt=0;for(int i=1;i<=n;i++){ans+=p[i].a;dt=max(0ll,dt-p[i].a);dt+=p[i].b;}ans+=dt;printf("%lld\n",ans);for(int i=1;i<=n;i++){if(i>1)printf(" ");printf("%d",p[i].id);}puts("");}Processing math: 100%。

调度问题总结

调度问题总结

调度问题总结引言调度问题是在计算机科学和操作管理领域中非常重要的一个概念。

它涉及到如何高效地分配资源、管理任务和优化系统性能等问题。

在本文中,我们将总结一些常见的调度问题及其解决方案。

调度问题的定义调度问题是指如何合理地安排和分配资源,以最大限度地优化系统的性能和效率。

在计算机领域中,调度问题通常涉及到任务的排序、分配和执行等方面。

具体而言,调度问题可以分为以下几类:1.作业调度问题:如何安排任务的执行顺序和优先级,以最大限度地减少总执行时间或提高系统吞吐量。

2.资源调度问题:如何合理地分配有限的资源,以满足不同任务的需求,并尽量减少资源的浪费。

3.进程调度问题:如何合理地分配和管理进程,以最大限度地提高系统的响应能力和资源利用率。

常见的调度问题及解决方案1. 作业调度问题作业调度问题是指如何安排任务的执行顺序和优先级,以最大限度地减少总执行时间或提高系统吞吐量。

常见的作业调度算法包括:•先来先服务(FCFS):按任务到达的顺序进行调度,适用于短作业或无特定要求的情况。

•最短作业优先(SJF):按任务的执行时间进行排序,先执行执行时间最短的任务。

•最高响应比优先(HRRN):根据任务的等待时间和执行时间之比进行排序,执行响应比最高的任务。

•时间片轮转(RR):将任务划分为若干时间片,按照轮转的方式执行任务。

2. 资源调度问题资源调度问题是指如何合理地分配有限的资源,以满足不同任务的需求,并尽量减少资源的浪费。

常见的资源调度算法包括:•静态优先级调度:为每个任务分配一个固定的优先级,根据优先级进行资源分配。

•动态优先级调度:根据任务的实时需求和系统状态进行优先级的动态调整。

•最大最小公平(Max-Min Fairness):以公平的方式分配资源,以满足每个任务的最小需求。

3. 进程调度问题进程调度问题是指如何合理地分配和管理进程,以最大限度地提高系统的响应能力和资源利用率。

常见的进程调度算法包括:•轮转调度:按轮转的方式分配CPU时间片给就绪队列中的进程,可以提高系统的响应速度和公平性。

作业调度问题1

作业调度问题1

分析:
直观上,一个最优调度应使机器M1没有空闲 时间,且机器M2的空闲时间最少。在一般情 况下,机器M2上会有机器空闲和作业积压2种 情况。
设全部作业的集合为N={1,2,…,n}。SN 是N的作业子集。在一般情况下,机器M1开始 加工S中作业时,机器M2还在加工其他作业, 要等时间t后才可利用。将这种情况下完成S中 作业所需的最短时间记为T(S,t)。流水作业调 度问题的最优值为T(N,0)。
xxxxxx
一、流水作业调度
问题的提出: n个作业{1,2,…,n}要在由2台机器M1和M2组成 的流水线上完成加工。每个作业加工的顺序都是先 在M1上加工,然后在M2上加工。M1和M2加工作业 i所需的时间分别为ai和bi。 流水作业调度问题要求确定这n个作业的最优加工顺 序,使得从第一个作业在机器M1上开始加工,到最 后一个作业在机器M2上加工完成所需的时间最少。
b4
j3
j2
a2
j1
a0
j0
a1 b0
a3
b2
b3
b1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
a5+a1+a3+a2+a4+b2+b4=16+3=19
J1 J2 J3 J4 J5 J6 印刷 3 12 5 2 9 12
装订 8 10 9 6 3 1
}
delete d; return k; }
程序执行结果: 完成作业所需最短时间 19 作业编号自0开始,作业执行顺序为 4 0 2 1 3
计算复杂度分析
算法flowShop的主要计算时间花在对做业集的 排序上。因此,在最坏的情况下算法FlowShop 所需的计算时间为O(nlogn),本算法对空间的要 求,只增加了n个辅助单元,因此,所需的空间 为O(n)。

7.4.4 调度算法举例

7.4.4 调度算法举例

例题1:假设在单道批处理环境下有四个作业,已知它们进入系统的时间、估计运行时间:应用先来先服务、最短作业优先和最高响应比优先作业调度算法,分别计算出作业的平均周转时间和带权的平均周转时间。

先来先服务算法计算结果:最短作业优先算法计算结果:最高响应比算法计算结果例题2:在两道环境下有四个作业, 已知它们进入系统的时间、估计运行时间,作业调度采用短作业优先算法,作业被调度运行后不再退出, 进程调度采用剩余时间最短的抢先调度算法(假设一个作业创建一个进程)。

请给出这四个作业的执行时间序列,并计算出平均周转时间及带权平均周转时间。

10:00,JOB1进入,只有一作业,JOB1被调入执行,10:05,JOB2到达,最多允许两作业同时进入,所以JOB2也被调入;内存中有两作业,哪一个执行?题目规定当一新作业运行后,可按作业运行时间长短调整执行次序;即基于优先数可抢占式调度策略,优先数是根据作业估计运行时间大小来决定的,由于JOB2运行时间(20分)比JOB1少(到10:05,JOB1还需25分钟),所以JOB2运行,而JOB1等待。

10:10,JOB3到达输入井,内存已有两作业,JOB3不能马上进入内存;10:20,JOB4也不能进入内存,10:25,JOB2运行结束,退出,内存中剩下JOB1,输入井中有两作业JOB3和JOB4,如何调度?作业调度算法:最短作业优先,因此JOB3进入内存,比较JOB1和JOB3运行时间,JOB3运行时间短,故JOB3运行,同样,JOB3退出后,下一个是JOB4,JOB4结束后,JOB1才能继续运行。

四个作业的执行时间序列为:JOB1:10:00—10:05,10:40—11:05 JOB2:10:05—10:25JOB3:10:25—10:30JOB4:10:30—10:40。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

分支限界法应用实例
M1 J0 J1 J2 J3 J4 2 4 3 6 1 M2 5 3 3 1 7 1、输入 m[0][0]=2 m[1][0]=4 m[2][0]=3 m[3][0]=6 m[4][0]=1 ; ; ; ; ; m[0][1]=5; m[1][1]=2; m[2][1]=3; m[3][1]=1; m[4][1]=7; 2、将m[][]拷贝到 b[][],并设立指针c[i]
分支限界法解批处理作业调度
分支限界法以广度优先或以最小耗费优先的方式搜索解空 间树。搜索的策略是在扩展结点处,首先让扩展结点出队, 一次性生成的所有儿子结点(分支),通过计算一个函数 值(限界), 淘汰导致不可行解或非最优解的儿子结点, 并将符合要求的儿子结点 放入一个FIFO队列或插入带有 优先级的队列(堆)中,然后再从当前的活结点中选择下 一个结点成为当前扩展结点。这个过程一直持续到找到所 需的解或活结点表为空时为止。 分支限界法解批处理作业调度问题,要从n个作业的所 有排列中找到具有最小完成时间的作业调度,它的解空 间树是一棵排列树。采用最小堆来表示活结点优先队列。
这可以作为优先队列式分支限界法中的限界函数。

主要标识符及其作用
类型 类 类 方法 方法 方法 数组 数组 数组 数组 数组 变量 方法 方法 标识符 HeapNode BBFlow sort bound bbFlow m[ ][ ] b[ ][ ] a[ ][ ] bestx[ ] y[ ][ ] enode swap(x,s,i) swap(b,k,j,k -1,j) 作用 堆结点 分支限界法解作业批处理
a[c[0]][0]=a[4][0]=0; a[c[1]][0]=a[0][0]=1; a[c[2]][0]=a[2][0]=2; a[c[3]][0]=a[1][0]=3; a[c[4]][0]=a[3][0]=4;
4、创建堆结点enode和最小堆初始化
为当前调度开辟n个空间,初始调度为顺序号。已安排的作业数为0, 机器1和机器2上的完成时间均为0,当前机器2上的完成时间和sf2也为0, 当前完成时间和下界bb为0。 5、搜索排列空间树 ①若为0个作业,直接进入叶结点,最佳调度时间为0,调度顺序保持原 顺序不变
表示增加非M 子集作业时计算的 起点位置,如果前M作业的机器 2 完成时间,即最后的黑线比新 加作业的红线长,取黑线,否则 取红线,此图属后一种情况
M 子集
图b
F
iM
2i

k r 1
max(F
n
2 pr
, F1 pr min(t1i )) (n k 1)t2 pk S2
实现x[i] 元素与x[s]位置交换 实现二维数组的元素交换,体现 方法的多态性
算法中用一个最小堆来表示活结点优先队列。最小堆中元 素类型是HeapNode。每一个HeapNode类型的结点包含 域x,用来表示结点所对应的作业调度。
S
表示该结点已安排的作业是x[1:s]。
f1 表示当前已安排的作业在机器1上的最后完成时间; f2 表示当前已安排的作业在机器2 上的最后完成时间; sf2 表示当前已安排的作业在机器2上的完成时间; bb 表示当前完成时间和的下界。
②一般不应为0个作业,至少作业数大于等于1,因此进入else 语句,计算 enode结点完成时间下限,调用方法bound.
//本程序取自王晓东编著“算法分析与设计”第 232 页,例 //批作业调度问题的分支限界解法 class MinHeap { //Min-heap impmentation static HeapNode[] Heap; //Pointer to the heap array static int size; //Maximum size of the heap static int n; //Number of elements now in heap public MinHeap(HeapNode[] h,int num,int max)//constructor { Heap=h;n=num;size=max;buildheap();} public int heapsize()//return current size of the heap { return n;} public static boolean isLeaf(int pos)//true if pos is a leaf position { if(n==1)return true; return(pos>=n/2)&&(pos<n);} //return position for left child of pos
非M子集
F1pr
Pr+1
立即衔接工作方式
这种情况是以机器 1的加工时间作为 参照的
pr
M 子集
图a
对于这种情况,对应从e结点到该叶结点的所有作业在机器2上完成处理时 间为(公式中 n-k+1 反映非 M子集元素,根据进入顺序其机器1加工时间 倍数逐次递减)
F
iM
2i

k r 1
F
n
1 pr
1. 问题的描述
给定n个作业的集合J={J1,J2,…,Jn}。每一个作业Ji都有2 项任务要分别在2台机器上完成。每一个作业必须先由 机器1处理,然后再由机器2处理。作业Ji需要机器j的处 理时间为tji,i=1,2,…,n;j=1,2。对于一个确定的作业调 度,设Fji是作业i在机器j上完成处理的时间。则所有作 n 业在机器2上完成处理的时间和 f F2 i
3. 算法描述
算法bbFlow是解批作业调度问题的优先队列式分支限界法的主体。算法开 始时,将排列树的根结点置为当前扩展节点。在初始扩展结点处还没有选 定的作业,故s=0,数组x初始化为单位排列。 算法的while循环完成对排列树内部结点的有序扩展。在while循环体内算法依 次从活结点优先队列中取出具有最小bb值(完成时间和下界)的结点作为当前 扩展结点,并加以扩展。算法当前扩展结点enode分为两种情形处理。 首先考虑enode.s=n的情形,此时已排定n个作业,当前扩展结点enode是排列 树中的叶结点。enode.x表示相应于叶结点的作业调度。 enode.sf2是相应于 该叶结点的完成时间和。当enode.sf2 < bestc时更新当前最优值bestc和相应 的当前最优解bestx。 当enode.s<n时,算法依次产生当前扩展结点enode的所有儿子结点。对于当 前扩展结点的每一个儿子结点node,计算出其相应的完成时间和的下界bb。 当bb < bestc时,将该儿子结点插入到活结点优先队列中。而当bb bestc时, 以node 为根的子树中不可能有比当前最优解bestx 更好的解,故可将结点 node舍去。
2. 限界函数
在结点E处相应子树中叶结点完成时间和的下界是:
f F2i max{ S1 , S 2 }
iM
注意到如果选择Pk,使t1pk在k>=r+1时依非减序排列, S1则取得极小值。同理如果选择Pk使t2pk依非减序排列, 则S2取得极小值。
f
iM
F
2i
ˆ ,S ˆ } max{ S 1 2
C[i]的变化 C[0]=0 4 C[1]=1 0 C[2]=2 2 C[3]=3 1 C[4]=4 3
机 器 1 排 序 后
3、对b[i][0]和b[i][1]按非减 序排序 b[0][0]=1 ; b[0][1]=1; b[1][0]=2 ; b[1][1]=2; b[2][0]=3 ; b[2][1]=3; b[3][0]=4 ; b[3][1]=5; b[4][0]=6 ; b[4][1]=7;
iM iM
设M子集中有r个元素,第r作业在F1上的加工完成时间为 F1pr,在F2上的加工完成时间为F2pr。
这是3个作业的调度排列树
1
∈M
A 2 C
3 D 3 1 I 2 N O 1 P H 1 2 J
2 E
∈M
B 3 F 2 3 L M 1 G
3 K
考虑两种特殊的情况,作为限界的选择。 一种是如果从e结点开始到叶结点的路上,每一个作业pk在机器1上完成处理 后都能立即在机器2上开始处理,即从pr+1开始机器1没有空闲时间。如图a
public static void Assert_notFalse(boolean p,String q) {if(!p)System.out.println((String)q);}
public static int key( HeapNode [] q,int p) { return q[p].bb;} //return position for left child of pos public static int leftchild(int pos) { Assert_notFalse(pos<n/2,"position has no left child"); return 2*pos+1; } //return position for right child of pos public static int rightchild(int pos) {Assert_notFalse(pos<(n-1)/2,"position has no right child"); return 2*pos+2; } public static int parent(int pos)//return position for parent {Assert_notFalse(pos>0,"position has no parent"); return (pos-1)/2; }
n k 1t1 pk t2 pk S1
相关文档
最新文档