CN112686471A - 基于贪婪策略的钢材生产优化调度方法 - Google Patents

基于贪婪策略的钢材生产优化调度方法 Download PDF

Info

Publication number
CN112686471A
CN112686471A CN202110083123.6A CN202110083123A CN112686471A CN 112686471 A CN112686471 A CN 112686471A CN 202110083123 A CN202110083123 A CN 202110083123A CN 112686471 A CN112686471 A CN 112686471A
Authority
CN
China
Prior art keywords
production
subtasks
current
subtask
processing
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202110083123.6A
Other languages
English (en)
Inventor
杨博
陈晓亮
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Chengdu Bozhiyunchuang Technology Co ltd
Original Assignee
Chengdu Bozhiyunchuang Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Chengdu Bozhiyunchuang Technology Co ltd filed Critical Chengdu Bozhiyunchuang Technology Co ltd
Priority to CN202110083123.6A priority Critical patent/CN112686471A/zh
Publication of CN112686471A publication Critical patent/CN112686471A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本发明提供了一种基于贪婪策略的钢材生产优化调度方法,包括以下步骤:S1:从生产购销合同中获取生产总任务,再将各个生产任务按照生产工序分解成若干生产子任务;S2:根据车间生产线的相关信息,生成生产线信息表,每条生产线完成一道工序;S3:创建结构体数组T和工序信息数组W,所述结构体数组T为分解后的生产子任务的集合,所述工序信息数组W存储工序信息,按照加工顺序依次将生产子任务与对应的工序信息建立联系,用于查找生产子任务的前件;S4:采用贪婪算法,优先选择使生产线利用效率最高的生产子任务调度到各生产线。

Description

基于贪婪策略的钢材生产优化调度方法
技术领域
本发明属于钢材加工生产调度优化技术领域,涉及作业车间调度问题,具体涉及一种基于贪婪策略的钢材生产优化调度方法。
背景技术
钢材是钢锭、钢坯等通过压力加工制成所需要的各种形状、尺寸和性能的材料,其应用广泛、品种繁多。随着我国钢铁工业的持续发展,钢铁产品逐渐个性化、多样化。而在当前这种离散的生产方式下,产品生产工序多,加工过程中的信息复杂且不易控制,很容易造成经济效益低等问题。如何在生产约束条件下安排大量的钢材加工任务是企业提高生产效率和生产利润的重要手段。
钢材加工的生产调度问题属于作业车间调度问题。具体来说,该问题具有以下的特点:
1、待加工工件具有多道工序(横切、纵剪、平整、热轧、锻压、涂层等),工序之间存在逻辑上的先后顺序。
2、不同类别的工件工序路线不相同。
3、由于工序的制约,生产线通常会出现较多的空闲时段。
4、生产车间有多个生产线,每条生产线完成钢材的一种工序类别的加工任务。
5、待加工工件的每一道工序仅需在一条生产线就可以完成加工。
最终,钢材加工任务调度的目的就是将各生产子任务(工序)按照加工顺序与加工规格的要求放到各生产线下,依次完成加工,同时要保证最大限度的按照交货期完工,实现车间的产能,效益的最优化。
当前,专门针对钢材加工生产调度问题的研究很少见。许多钢铁行业研究机构、工程师与学者都尝试并致力于钢铁生产调度问题的优化,应用的算法包括贪婪算法、混合整数规划、动态规划、遗传算法、粒子群算法和禁忌搜索等。混合整数规划面临状态空间爆炸问题,其正常实施对于生产线和工序数量上限均有要求。动态规划、遗传算法、粒子群算法和禁忌搜索等方法时间复杂度很高,可移植性低,特别是对于由钢材厂场景差异导致的算法微调代价过高,不能满足实际生产运用中的各种不确定性因素。从总体趋势来看,贪婪算法仍然最受关注,主要原因是贪婪算法时间效率高,其局部最优特性使得算法不受生产线和工序数量限制,算法场景适应性强,一定会获得一个可用的调度计算结果。而当前贪婪算法解决车间调度问题存在一定缺陷,局部最优大部分情况会导致全局仍然存在产线大量时段空闲。通过贪婪算法获得的调度结果通常仍然需要人力进行二次优化才能最终使用,最终调度结果一定层度依赖于二次优化工人的个人经验。这种不确定性在钢铁行业工人流动较大的情况下会发生真实产能的波动,影响企业生产效益。
发明内容
针对目前钢材加工生产调度中存在的上述问题,本发明提供了一种基于贪婪策略的钢材生产优化调度方法。该方法以时间最优和设备使用均衡为主要目标,同时考虑交货日期,基于贪婪算法进行优化调度,取得在一定生产条件下的加工任务的较优解,实现生产效率的高效化。
为了实现本发明的目的,本发明采用的技术方案是:
一种基于贪婪策略的钢材生产优化调度方法,包括以下步骤:
S1:从生产购销合同中获取生产总任务,再将各个生产任务按照生产工序分解成若干生产子任务;
S2:根据车间生产线的相关信息,生成生产线信息表,每条生产线完成一道工序;
S3:创建结构体数组T和工序信息数组W,所述结构体数组T为分解后的生产子任务的集合,所述工序信息数组W存储工序信息,按照加工顺序依次将生产子任务与对应的工序信息建立联系,用于查找生产子任务的前件;
S4:采用贪婪算法,优先选择使生产线利用效率最高的生产子任务调度到各生产线。
本发明所述生产线信息表存储的信息包括各生产线对应的工序、任务序列和加工时间记录。
本发明所述的S3步骤,所述结构体数组T存储的信息包括对应的生产线、加工时间、前件和交货日期;所述工序信息数组W存储的信息包括生产子任务的加工状态和加工完成的时间。
本发明所述前件为生产子任务的待加工物件,所述生产任务的第一个子任务所对应的工序信息为无前件。
本发明所述贪婪算法包括以下步骤:
S41:将生产总任务的所有生产子任务以交货日期先后的顺序排序,如果交货日期相同则按照加工时间递减的顺序排序;
S42:按照已排序的生产子任务顺序集合,依次从结构体数组T中提取生产子任务作为当前子任务
Figure 874635DEST_PATH_IMAGE001
,通过其对应的工序信息
Figure 615058DEST_PATH_IMAGE002
查找其前件,并判断前件是否被加工完成;若无前件或前件状态为加工完成,则进入下一步骤,否则提取下一个子任务
Figure 908636DEST_PATH_IMAGE003
并重复本步骤;
S43:从生产线信息表中选取符合当前子任务
Figure 559061DEST_PATH_IMAGE001
的生产线作为当前生产线
Figure 342209DEST_PATH_IMAGE004
,将当前子任务
Figure 710873DEST_PATH_IMAGE001
安排到当前生产线
Figure 870459DEST_PATH_IMAGE004
S44:更新当前生产线
Figure 172127DEST_PATH_IMAGE004
的任务序列和加工时间记录,同时更新工序信息数组W中对应子任务的加工状态和加工完成的时间信息;
S45:继续执行S42步骤,直到所有生产子任务安排完成。
如果当前子任务
Figure 267122DEST_PATH_IMAGE001
有前件,判断该前件是否被加工完成的步骤如下:
S421:寻找当前子任务
Figure 716558DEST_PATH_IMAGE001
的指针所指向的工序信息数组
Figure 555201DEST_PATH_IMAGE002
S422:将指针向前移一个单位,即指向工序信息数组
Figure 304851DEST_PATH_IMAGE005
S423:获取
Figure 367485DEST_PATH_IMAGE005
中的物件加工状态信息。
优选地,所述的S43步骤还包括前插操作,具体如下:
S431:获取当前生产线
Figure 445163DEST_PATH_IMAGE004
的任务序列;
S432:从当前子任务
Figure 149814DEST_PATH_IMAGE001
的前件加工结束时刻到当前生产线
Figure 426074DEST_PATH_IMAGE004
任务序列的结束时刻,查询是否有空余时间大于或等于当前子任务
Figure 987506DEST_PATH_IMAGE001
的加工时间。
S433:如果有符合条件的空余时间,则将当前子任务
Figure 286900DEST_PATH_IMAGE001
前插到空余时间中。
进一步优选地,若存在多个符合条件的空余时间,则将当前子任务
Figure 591979DEST_PATH_IMAGE001
前插到最大的空余时间中。
本发明的有益效果在于:
1、本发明按加工工序将生产任务分解成若干子任务,在最大限度保证合同按期交货的前提下,再根据加工耗时进行顺序,建立各子任务与工序信息之间的联系,进行前件状态查询,以加工任务总体时间最短为目标,采用贪婪算法思路选择当前能使机器空余时间最短的子任务(工序)进行调度生产,从而使多条生产线的总体任务加工时间最短,最大限度的在限定日期内完成生产加工任务。
2、贪婪算法实施过程的排序操作,使生产子任务的前件不易寻找。本发明通过建立子任务与工序信息的结构体数组,采用指针寻找前件,判断前件的加工状态相对容易,时间复杂度更低,计算更快。
3、本发明通过贪婪计算和自适应的子任务“前插”计算组合成高效的两阶段贪婪调度算法。尽可能的将当前子任务“前插”,在保证生产任务可以按时完成的前提下,达到无无空闲生产线的目的,尽可能的缩短加工时间,增加各生产线的加工效率,进一步提高生产效益。
附图说明
图1为基于贪婪策略的钢材车间生产任务调度主流程图。
图2为采用贪婪算法进行子任务选择的调度流程图。
具体实施方式
为了更加清楚、详细地说明本发明的目的技术方案,下面通过相关实施例对本发明进行进一步描述。以下实施例仅为具体说明本发明的实施方法,并不限定本发明的保护范围。
实施例1
一种基于贪婪策略的钢材生产优化调度方法,包括以下步骤:
S1:从生产购销合同中获取生产总任务,再将各个生产任务按照生产工序分解成若干生产子任务;
S2:根据车间生产线的相关信息,生成生产线信息表,每条生产线完成一道工序;
S3:创建结构体数组T和工序信息数组W,所述结构体数组T为分解后的生产子任务的集合,所述工序信息数组W存储工序信息,按照加工顺序依次将生产子任务与对应的工序信息建立联系,用于查找生产子任务的前件;
S4:采用贪婪算法,优先选择使生产线利用效率最高的生产子任务调度到各生产线。
一个合同要求生产不同型号的工件3类,即3个生产任务,这里的一个生产任务会被分解为多个生产子任务,在综合考虑如产能交期等条件下,将其中一个生产任务分为三个子任务,被安排在3个不同的生产线进行生产。本发明方法适用于具备上述两阶段分单特性的生产合同实施。另外本发明方法适用场景中,一个生产子任务只包含一道工序,只对应一个生产线(例如大部分钢卷裁切生产线就是这种情况)。
本发明为所有生产任务创建结构体数组T和工序信息数组W,所述工序信息即生产子任务的具体信息。一个工序信息需要存储对应的生产子任务的当前状态(加工或未被加工)、在哪条线上加工。
实施例2
本实施例在实施例1的基础上:
所述前件为生产子任务的待加工物件,所述生产任务的第一个子任务所对应的工序信息为无前件。
所述生产线信息表存储的信息包括各生产线对应的工序、任务序列和加工时间记录。
所述的S3步骤,所述结构体数组T存储的信息包括对应的生产线、加工时间、前件和交货日期;所述工序信息数组W存储的信息包括生产子任务的加工状态和加工完成的时间。
实施例3
本实施例在实施例1的基础上:
所述贪婪算法包括以下步骤:
S41:将生产总任务的所有生产子任务以交货日期先后的顺序排序,如果交货日期相同则按照加工时间递减的顺序排序;
如共有2个生产任务,每个生产任务有3个生产子任务,则有:
任务1的生产子任务1,2,3分别被填充到T[1]、T[2]、T[3],对应的工序信息分别为:W[1]、W[2]、W[3]。
任务2的生产子任务1,2,3分别被填充到T[4]、T[5]、T[6],对应的工序信息分别为:W[4]、W[5]、W[6]。
先按照交货日期排序,任务1的子任务必定是排在一起的,各子任务再按照加工时间递减的顺序排序进行当前子任务的提取。
S42:按照已排序的生产子任务顺序集合,依次从结构体数组T中提取生产子任务作为当前子任务
Figure 191588DEST_PATH_IMAGE001
,通过其对应的工序信息
Figure 596024DEST_PATH_IMAGE002
查找其前件,并判断前件是否被加工完成;若无前件或前件状态为加工完成,则进入下一步骤,否则提取下一个子任务
Figure 507349DEST_PATH_IMAGE003
并重复本步骤;
如果当前子任务
Figure 225906DEST_PATH_IMAGE001
有前件,判断该前件是否被加工完成的步骤如下:
S421:寻找当前子任务
Figure 804655DEST_PATH_IMAGE001
的指针所指向的工序信息数组
Figure 379993DEST_PATH_IMAGE002
S422:将指针向前移一个单位,即指向工序信息数组
Figure 653979DEST_PATH_IMAGE005
S423:获取
Figure 300861DEST_PATH_IMAGE005
中的物件加工状态信息。
S43:从生产线信息表中选取符合当前子任务
Figure 343903DEST_PATH_IMAGE001
的生产线作为当前生产线
Figure 418039DEST_PATH_IMAGE004
,将当前子任务
Figure 241638DEST_PATH_IMAGE001
安排到当前生产线
Figure 36419DEST_PATH_IMAGE004
S44:更新当前生产线
Figure 261864DEST_PATH_IMAGE004
的任务序列和加工时间记录,同时更新工序信息数组W中对应的子任务加工状态和加工完成的时间信息;
S45:继续执行S42步骤,直到所有生产子任务安排完成。
实施例4
本实施例在实施例3的基础上:
所述的S43步骤还包括前插操作,具体如下:
S431:获取当前生产线
Figure 241321DEST_PATH_IMAGE004
的任务序列;
S432:从当前子任务
Figure 489900DEST_PATH_IMAGE001
的前件加工结束时刻到当前生产线
Figure 478585DEST_PATH_IMAGE004
任务序列的结束时刻,查询是否有空余时间大于或等于当前子任务
Figure 558536DEST_PATH_IMAGE001
的加工时间。
S433:如果有符合条件的空余时间,则将当前子任务
Figure 849840DEST_PATH_IMAGE001
前插到空余时间中。
若存在多个符合条件的空余时间,则将当前子任务
Figure 444769DEST_PATH_IMAGE001
前插到最大的空余时间中。
若无空余时间,则将当前子任务
Figure 112511DEST_PATH_IMAGE001
依次排列在当前生产线
Figure 46969DEST_PATH_IMAGE004
任务序列的末尾。
可在此基础上,记录优化程度数据,即前插操作节约的时间。最后,输出各生产线的调度时间安排,调度任务结束。
以上所述实施例仅表达了本发明的具体实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。

Claims (8)

1.一种基于贪婪策略的钢材生产优化调度方法,其特征在于,包括以下步骤:
S1:从生产购销合同中获取生产总任务,再将各个生产任务按照生产工序分解成若干生产子任务;
S2:根据车间生产线的相关信息,生成生产线信息表,每条生产线完成一道工序;
S3:创建结构体数组T和工序信息数组W,所述结构体数组T为分解后的生产子任务的集合,所述工序信息数组W存储工序信息,按照加工顺序依次将生产子任务与对应的工序信息建立联系,用于查找生产子任务的前件;
S4:采用贪婪算法,优先选择使生产线利用效率最高的生产子任务调度到各生产线。
2.根据权利要求1所述基于贪婪策略的钢材生产优化调度方法,其特征在于,所述生产线信息表存储的信息包括各生产线对应的工序、任务序列和加工时间记录。
3.根据权利要求1所述基于贪婪策略的钢材生产优化调度方法,其特征在于,所述的S3步骤,所述结构体数组T存储的信息包括对应的生产线、加工时间、前件和交货日期;所述工序信息数组W存储的信息包括生产子任务的加工状态和加工完成的时间。
4.根据权利要求1所述基于贪婪策略的钢材生产优化调度方法,其特征在于,所述前件为生产子任务的待加工物件,所述生产任务的第一个子任务所对应的工序信息为无前件。
5.根据权利要求1所述基于贪婪策略的钢材生产优化调度方法,其特征在于,所述贪婪算法包括以下步骤:
S41:将生产总任务的所有生产子任务以交货日期先后的顺序排序,如果交货日期相同则按照加工时间递减的顺序排序;
S42:按照已排序的生产子任务顺序集合,依次从结构体数组T中提取生产子任务作为当前子任务
Figure 924137DEST_PATH_IMAGE001
,通过其对应的工序信息
Figure 147308DEST_PATH_IMAGE002
查找其前件,并判断前件是否被加工完成;若无前件或前件状态为加工完成,则进入下一步骤,否则提取下一个子任务
Figure 415478DEST_PATH_IMAGE003
并重复本步骤;
S43:从生产线信息表中选取符合当前子任务
Figure 266760DEST_PATH_IMAGE001
的生产线作为当前生产线
Figure 899866DEST_PATH_IMAGE004
,将当前子任务
Figure 407071DEST_PATH_IMAGE001
安排到当前生产线
Figure 541249DEST_PATH_IMAGE004
S44:更新当前生产线
Figure 122403DEST_PATH_IMAGE004
的任务序列和加工时间记录,同时更新工序信息数组W中对应子任务的加工状态和加工完成的时间信息;
S45:继续执行S42步骤,直到所有生产子任务安排完成。
6.根据权利要求5所述基于贪婪策略的钢材生产优化调度方法,其特征在于,如果当前子任务
Figure 988728DEST_PATH_IMAGE001
有前件,判断该前件是否被加工完成的步骤如下:
S421:寻找当前子任务
Figure 45546DEST_PATH_IMAGE001
的指针所指向的工序信息数组
Figure 593202DEST_PATH_IMAGE002
S422:将指针向前移一个单位,即指向工序信息数组
Figure 91179DEST_PATH_IMAGE005
S423:获取
Figure 456302DEST_PATH_IMAGE005
中的物件加工状态信息。
7.根据权利要求5所述基于贪婪策略的钢材生产优化调度方法,其特征在于,所述的S43步骤还包括前插操作,具体如下:
S431:获取当前生产线
Figure 610202DEST_PATH_IMAGE004
的任务序列;
S432:从当前子任务
Figure 758287DEST_PATH_IMAGE001
的前件加工结束时刻到当前生产线
Figure 704246DEST_PATH_IMAGE004
任务序列的结束时刻,查询是否有空余时间大于或等于当前子任务
Figure 850057DEST_PATH_IMAGE001
的加工时间;
S433:如果有符合条件的空余时间,则将当前子任务
Figure 553571DEST_PATH_IMAGE001
前插到空余时间中。
8.根据权利要求7所述基于贪婪策略的钢材生产优化调度方法,其特征在于,若存在多个符合条件的空余时间,则将当前子任务
Figure 833242DEST_PATH_IMAGE001
前插到最大的空余时间中。
CN202110083123.6A 2021-01-21 2021-01-21 基于贪婪策略的钢材生产优化调度方法 Pending CN112686471A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110083123.6A CN112686471A (zh) 2021-01-21 2021-01-21 基于贪婪策略的钢材生产优化调度方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110083123.6A CN112686471A (zh) 2021-01-21 2021-01-21 基于贪婪策略的钢材生产优化调度方法

Publications (1)

Publication Number Publication Date
CN112686471A true CN112686471A (zh) 2021-04-20

Family

ID=75458774

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110083123.6A Pending CN112686471A (zh) 2021-01-21 2021-01-21 基于贪婪策略的钢材生产优化调度方法

Country Status (1)

Country Link
CN (1) CN112686471A (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104636813A (zh) * 2013-11-12 2015-05-20 中国科学院沈阳计算技术研究所有限公司 一种求解车间作业调度问题的混合遗传模拟退火算法
CN111105133A (zh) * 2019-11-08 2020-05-05 成都博智云创科技有限公司 生产调度方法、计算机设备以及存储介质
CN112001618A (zh) * 2020-08-18 2020-11-27 西安建筑科技大学 一种工期指派、订单接受与生产调度集成优化方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104636813A (zh) * 2013-11-12 2015-05-20 中国科学院沈阳计算技术研究所有限公司 一种求解车间作业调度问题的混合遗传模拟退火算法
CN111105133A (zh) * 2019-11-08 2020-05-05 成都博智云创科技有限公司 生产调度方法、计算机设备以及存储介质
CN112001618A (zh) * 2020-08-18 2020-11-27 西安建筑科技大学 一种工期指派、订单接受与生产调度集成优化方法

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
丁书斌等: "混合遗传算法求解经典作业车间调度问题", 《煤矿机械》, no. 1, 25 January 2007 (2007-01-25), pages 27 - 29 *
唐立新: "基于智能优化的钢铁生产计划与调度研究", 《管理学报》, no. 3, 15 May 2005 (2005-05-15), pages 13 - 17 *
董杰方等: "钢卷热处理调度的数学模型与算法研究", 《钢铁》, no. 12, 30 December 2001 (2001-12-30), pages 75 - 78 *
邵炜世: "基于元启发式的分布式车间调度方法研究", 《中国博士学位论文全文数据库 工程科技I辑》, no. 1, 15 January 2020 (2020-01-15), pages 029 - 52 *

Similar Documents

Publication Publication Date Title
CN109359884B (zh) 航空复杂装备结构件车间作业计划及重调度方法
CN110955206B (zh) 一种订单排程与分配调度方法及系统
CN110738413A (zh) 航空零件加工自动化生产线的多约束排产计算方法及装置
CN110288185B (zh) 一种分布式柔性流水线调度方法
CN111781898B (zh) 优化最大拖期的柔性作业车间调度的分布估计算法
CN112859785B (zh) 基于多目标优化算法的纸盆车间生产调度方法及调度系统
CN111260181A (zh) 一种基于分布式智能制造单元的车间自适应生产调度装置
CN110750079A (zh) 一种允许工序跳跃的混合流水车间调度优化方法
CN107437121B (zh) 适用于多机器同时处理单工件的生产工艺过程控制方法
KR102029378B1 (ko) 생산 스케줄링 시스템
CN115309111A (zh) 一种资源受限的分布式混合流水车间调度方法与系统
Yan et al. A case study on integrated production planning and scheduling in a three-stage manufacturing system
CN112686471A (zh) 基于贪婪策略的钢材生产优化调度方法
CN115660261B (zh) 生产订单信息处理方法、计算机装置和存储介质
Gan et al. Scheduling of flexible-sequenced process plans in a mould manufacturing shop
Rathinasamy Sequencing and scheduling of nonuniform flow pattern in parallel hybrid flow shop
Buchmeister et al. MANUFACTURING SCHEDULING PERFORMANCE–A CASE STUDY.
CN112330185A (zh) 一种原料场智能调度方法及系统
Pan et al. Single machine group scheduling to minimize mean flow time subject to due date constraints
Qiao et al. Genetic algorithm based novel methodology of multi-constraint job scheduling
Lahrichi et al. Reconfigurable transfer line balancing problem: A new MIP approach and approximation hybrid algorithm
CN114676987B (zh) 一种基于超启发式算法的智能柔性作业车间主动调度方法
Rafiei et al. A mathematical model for the single machine scheduling considering sequence dependent setup costs and idle times
CN110705872A (zh) 一种复合型并行加工的生产物流调度分析方法
Taguemount et al. Multi-Line Hybrid Flow Shop Scheduling Problem with Energy Considerations

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination