第五章 综合的约束与优化

第五章 综合的约束与优化
第五章 综合的约束与优化

第五章综合的约束与优化

综合的一个很重要的概念就是:单纯的映射是远远不够的,更重要的是设计的整体优化。一方面设计工程师为综合规定必要的约束,例如对面积、速度、功耗的要求等,从而使优化有所依据;另一方面选择合适的综合器是优化程度的决定性因素。同一个设计使用不同的综合器所得到的优化结果可以相差3~5倍。

第一节综合约束

5-1-1 概述

综合约束是对可测量的电路特性所定义的设计目标,比如面积、速度和电容等。如果没有这些约束,Design Compiler工具将不能有效地对你的设计进行最优化。

在对设计进行优化时,Design Compiler支持两种类型的约束:

●设计规则约束(Design rule constraints)

●最优化约束(Optimization constraints)

设计规则约束是固有的,在工艺库里定义;这些约束条件是为了保证设计

的功能正确性,适用于使用工艺库的每一个设计;可以使这些约束比最优化约束更为严格。

最优化约束是外在的,由设计者自己定义;最优化约束描述设计指标,在整个dc_shell 工作期间应用于当前设计;它们必须接近于现实情况。

Design Compiler试图同时满足设计规则约束和最优化约束,但设计规则约束必须首先被满足。设计者可以以命令行形式交互式的指定约束或者在一个约束文件里指令约束。

图5.1显示了主要的设计规则约束和最优化约束,以及如何用dc_shell界面命令来设置这些约束。

图5.1 Major Design Compiler Constraints

第二节设置设计规则约束

这一节将讨论最常用的设计规则约束:

?转换时间(Transition time)

?扇出负载(Fanout load)

?电容(Capacitance)

Design Compiler给设计对象赋予属性来表示这些设计规则约束。表5.1列出了每一个设计规则约束对应的属性名。

表5.1 设计规则属性

设计规则约束是工艺库里指定属性,你也可以明确地、随意地指定这些约束。如果工艺库里定义了这些属性,在进行设计编译和生成约束报告时,Design Compiler暗中将它们应用于使用那个库的任何设计。你不能移走工艺库里定义的设计规则约束,因为它们是工艺的特定要求,但你可以使它们更为严格来适应你的设计。如果内在的和外在的设计规则约束同时应用于一个设计或一条线,更为严格的值拥有优先权。

5-2-1 设置转换时间约束

线的转换时间约束是对它的驱动管脚改变逻辑值的时序要求。转换时间是以工艺库数

据为基础。对于非线性延迟模型(NLDM),输出转换时间是输入转换和输出负载的函数。

通过对一个单元的每一个输出管脚赋予max_transition属性,Design Compiler和Library Compiler模拟转换时间约束。在最优化过程中,Design Compiler试图使每一条线的转换时间都小于max_transition属性值。命令set_max_transition用来改变工艺库里指定的最大转换时间约束。通过对指定的对象设置max_transition属性,这条命令给设计中所有线或与确定端口相连的线设置了最大转换时间。

比如,对设计adder中的所有线设置最大转换时间3.2,输入:

dc_shell> set_max_transition 3.2 find(design,adder)

利用remove_attribute命令来取消set_max_transition命令,比如,输入:

dc_shell> remove_attribute find(design,adder)\max_transition

5-2-2 设置扇出负载约束

线的最大扇出负载是指这条线所能驱动的最大数目的负载。

通过赋予每一个输入管脚fanout_load属性和一个单元的每一个输出管脚max_fanout 属性,Design Compiler和Library Compiler模拟扇出限制。

扇出负载值不表示电容;它表示对整个扇出负载的数字上的贡献。强加于一个输入管脚的扇出负载不必是1.0。库的开发者可以指定更高的扇出负载值来模仿内在的单元负载效果。将有那个管脚驱动的所有输入的fanout_load值相加,Design Compiler计算一个驱动管脚的扇出。为确定这个管脚是否满足最大扇出负载约束,Design Compiler将计算的扇出负载值和管脚的max_fanout值相比较。

图5.2显示了一个小电路。其中管脚X驱动两个负载,管脚A和管脚B。如果管脚A的fanout_load值为1.0,管脚B的fanout_load为2.0,那管脚X的整个扇出负载为3.0。如果管脚X有一个大于3.0的最大扇出,比如说16.0,那管脚X符合扇出约束。

图5.2 扇出约束实例

在最优化时,Design Compiler试图满足每一个驱动管脚的扇出负载限制。如果一个管脚违反了扇出负载限制,Design Compiler会尽力改正这个问题(比如通过改变这个元件的驱动能力)。

工艺库可能对整个库指定默认的扇出约束,或对库描述的一个单独的单元里特定的管脚指定扇出约束。为确定你的工艺库是否为扇出计算而模拟,你可以对单元的输入管脚搜索fanout_load属性:

dc_shell> get_attribute find(pin, my_lib/*/*) fanout_load

用set_max_fanout命令对设计或输入管脚设置比工艺库里指定的更为保守的扇出约

束(用set_fanout_load命令对输出端口设置预期的扇出负载值)。set_max_fanout命令通过对指定对象设置max_fanout属性对设计中的所有线或指定的输入端口设置最大扇出负载。比如,要对设计adder中的所有线设置max_fanout为16,输入:

dc_shell> set_max_fanout 16 find(design, adder)

如果你用set_max_fanout命令和存在库的max_fanout属性,Design Compiler会尽力满足更小的扇出限制。

用remove_attribute命令来取消set_max_fanout命令,比如,输入:

dc_shell> remove_attribute find(design,adder) max_fanout

5-2-3 设置电容约束

转换时间约束并没有提供一个直接的方式来控制线的真实电容。如果你想要直接控制电容,利用set_max_capacitance命令来设置最大电容约束。这个约束是完全独立的,因此除了转换时间约束外,你还可以使用它。

通过给一个单元的输出端口或管脚赋予max_capacitance属性,Design Compiler和Library Compiler模拟电容约束。把线电容和管脚电容相加,Design Compiler来计算输出线的电容。为确定线是否满足电容约束,Design Compiler把计算出的电容值与输出管脚的max_capacitance值相比较。

比如,对设计adder中的所有线设置最大电容为3,输入:

dc_shell> set_max_capacitance 3 find(design,adder)

用remove_attribute命令来取消set_max_capacitance命令,如,输入:

dc_shell> remove_attribute find(design,adder)\max_capacitance

你也可以用set_min_capacitance命令对输入端口或管脚设置最小电容。

第三节设置最优化约束

这一节中将讨论最常用的指定的最优化约束:

?时序约束(Timing constraints)

?面积约束(Area constraints)

Design Compiler也支持功耗约束。图5.3解释了定义最优化约束的一些常用的命令。

图5.3 Commands Used to Define the Optimization Constraints for Sequential Blocks

5-3-1 设置时序约束

时序约束指定了设计所要求的性能。为设置时序约束,

1.定义时钟。

2.定义与时钟相关的I/O的时序要求。

3.指定组合路径延迟要求。

4.指定时序异常。

表5.2列出了设置时序约束的命令。

表5.2 设置时序约束的命令

下面的部分将详细介绍三个步骤。

5-3-1-1 定义一个时钟

对于一个同步设计,时钟周期是最重要的约束,因为它对设计中所有寄存器到寄存器的路径加以约束。

1.定义时钟的周期和波形

利用create_clock来定义时钟的周期(-period选项)和波形(-waveform选项)。如果你没有指定时钟的波形,Design Compiler使用50%的占空循环。

比如,对端口clk指定25兆赫和50%的占空循环,输入:

dc_shell> create_clock clk -period 40

当你的设计包含多时钟时,密切注意这些时钟共同的基本周期。共同的基本周期是所有时钟周期最小的共同的倍数。比如,如果你有10,15,20的时钟周期,那共同的基本周期就为60。

定义你的时钟以使这个共同的基本周期是每一个时钟周期的最小的整数倍数。这个共同的基本周期的要求是定性的,不存在硬性限制。如果这个基本周期大于最小周期的十倍,

那结果是要求更长的运行时间和更大的内存。

一个极端的情况是如果你有一个寄存器到寄存器的路径,其中一个寄存器的周期为10,而另一个寄存器的周期为10.1,那么共同的基本周期就为1010.0。通过指定不带小数点的时钟周期,插入不确定的时钟来调整时钟周期,你可以解决这个问题。

dc_shell> create_clock -period 10 clk1

dc_shell> create_clock -period 10 clk2

dc_shell> set_clock_uncertainty -setup 0.1 clk2

用report_clock命令来显示设计中所有时钟资源的信息,用remove_clock命令来移走时钟的定义。

2.创建虚拟时钟

许多情况下,一个模块里可能不存在系统时钟。你可以用create_clock-name来创建一个虚拟时钟,模拟系统中表现的时钟信号。通过创建一个虚拟时钟,你可以描述模块外的与时钟相关的延迟。

dc_shell> create_clock -period 30 -waveform {10 25} \-name sys_clk

3.指定时钟网络延迟

默认情况下,Design Compiler假设时钟网络没有延迟(完美的时钟)。用set_clock_latency和set_clock_uncertainty命令来指定关于时钟网络延迟的时序信息。你也可以用这些命令来指定估计的或真实的延迟信息。用set_propagated_clock命令来指定通过时钟网络传播的时钟等待,比如:

dc_shell> set_propagated_clock clk

考虑到由于布局导致的时钟网络的变化,利用set_clock_latency命令的-setup或-hold选项增加少许的错误富余。比如,对于先期提到的20兆赫的时钟,在时钟边缘的每一边增加0.2的富余,输入:

dc_shell> set_clock_uncertainty -setup 0.2 clk

dc_shell> set_clock_uncertainty -hold 0.2 clk

使用report_clock命令的-skew选项来显示时钟网络的时滞信息。Design Compiler 用这些时钟信息来确定一条路径是否满足建立和保持时间。

5-3-1-2 指定I/O时序要求

如果你没有对一个输入端口指定时序要求,Design Compiler假设信号在零时刻到达输入端口。绝大多数情况下,输入信号在交错时间到达。用命令set_input_delay定义输入端口的到达时间。你定义相对于系统时钟和其他输入端口的输入延迟约束。

如果你没有对一个输出端口指定时序要求,Design Compiler不会对任何一个以该输出端口结束的路径加以约束。用set_output_delay命令来定义要求的输出到达时间。你定义相对于系统时钟的输出延迟约束。

如果一个输入或输出端口有多重的时序要求(因为多重路径),用-add_delay来指定

额外的时序要求。

用report_port命令来列出与端口相关的输入或输出的延迟。用remove_input_delay 命令移走输入延迟约束。用remove_output_delay命令移走输出延迟约束。

图5.4显示了延迟和有效的时钟沿之间的关系(如图中的上升沿)。

图5.4 Relationship Between Delay and Active Clock Edge

图中,模块A有输入DATA_IN和输出DATA_OUT。从波形图中可以看到,DATA_IN在时钟上升沿后稳定20ns;DATA_OUT必须在时钟上升沿前15ns有效。在你用create_clock命令设置时钟约束后,用set_input_delay和set_output_delay命令来指定这些额外的要求。比如,输入:

dc_shell> set_input_delay 20 -clock CLK DATA_IN

dc_shell> set_output_delay 15 -clock CLK DATA_OUT

下面是一个加以约束的设计模块的实例:图5.5解释了设计模块my_block的时序要求,下面的命令行是用来定义这些时序要求的。

图5.5 my_block的时序要求

create_clock -period 20 -waveform {5 15} clka

create_clock -period 30 -waveform {10 25} clkb

set_input_delay 10.4 -clock clka in1

set_input_delay 6.4 -clock clkb -add_delay in1

set_output_delay 1.6 -clock clka -min out1

set_output_delay 4.8 -clock clka -max out1

5-3-1-3 指定组合路径延迟要求

对于不被时钟周期限制的完全的组合延迟,命令set_max_delay和set_min_delay定义指定路径的最小和最大延迟。

在HDL代码中产生异步逻辑,一种普通的方法就是对锁存器和触发器使用异步置位或复位。因为复位信号跨越几个模块,在顶层约束这个信号。比如,要对复位信号定义最大延迟为5,输入:

dc_shell> set_max_delay 5 -from RESET

对从IN1到OUT1的路径指定最小延迟为10,输入:

dc_shell> set_min_delay 10 -from IN1 -to OUT1

用report_timing_requirements命令列出对你的设计所要求的最大和最小延迟。

5-3-1-4 指定时序异常

时序异常是对一个或更多的违反默认的单循环时序关系的路径指定时序关系。利用时序异常来对那些不遵循默认的单循环行为的路径或异步路径加以约束或使其失去作用。指定众多的时序异常会增加编译时间。然而,很多设计需要许多的时序异常。

Design Compiler只承认有正确参考点的时序异常。

?设计中的有效起点是指时序单元的主要的输入端口和时钟管脚。

?有效的结束点是指设计的主要输出端口和时序单元的数据管脚。

如果你指定了一个无效的参考点,Design Compiler不会发出警告信息。你必须用命令report_timing_requirements中的-ignored选项来查明被Design Compiler忽视的时序异常。

你可以利用时序异常命令来指定下列条件:

?错误路径(False paths (set_false_path))

?最小延迟要求(Minimum delay requirements (set_min_delay))

?最大延迟要求(Maximum delay requirements (set_max_delay))

?多循环路径(Multicycle paths (set_multicycle_path))

用report_timing_requirements命令列出设计中的时序异常。

1.指定错误路径

Design Compiler在时序报告中不报告错误路径,或在时序优化时不照顾它们。用命令set_false_path指定错误路径。用这个命令来忽视那些非关键路径,它们可能掩盖其他一些在优化时必须考虑的路径;或者是那些在正常操作中从不会发生。

比如,图5.6显示了一个寄存器的外形,它从双向总线(DATA)进行读写。

图5.6 Configuration Register

这个电路有这些时序路径:

1. DATA to U1/D

2. RD to DATA

3. U1/G to CONFIG (with possible time borrowing at U1/D)

4. U1/G to DATA (with possible time borrowing at U1/D)

5. U1/G to U1/D (through DATA, with possible time borrowing)

前面四条路径都是有效的,而第五条是一条功能错误的路径,因为正常的操作不可能要求对寄存器同时进行读和写。在这个设计里,你可以用这个命令来使这条路径失效:

dc_shell> set_false_path -from U1/G -to U1/D

利用reset_path命令和相同的选项取消set_false_path命令,输入:

dc_shell> set_false_path -setup -from IN2 -to FF12/D

dc_shell> reset_path -setup -from IN2 -to FF12/D

创建一条错误路径不同于使时序弧失效。使时序弧失效表示一条路径的中断。定义一个错误路径并不中断路径,它只是阻止在优化时,这条路径被考虑。

2.指定最小和最大延迟要求

你可以用set_min_delay和set_max_delay来指定路径延迟要求,它们远比Design Compiler根据时钟时序得到的保守。利用reset_path命令取消set_min_delay和set_max_delay命令。

(1)寄存器到寄存器的路径

Design Compiler利用下列方程式得到寄存器到寄存器路径的最小和最大路径延迟的约束:

min_delay = (T capture - T launch ) + hold

max_delay = (T capture - T launch ) - setup

你可以利用set_min_delay和set_max_delay命令而不考虑得到的路径延迟(T capture –T launch)。

比如,假设你有一条路径,时间20时从一个寄存器开始,在时间35到达一个寄存器,此时是时钟的下一个有效沿:

dc_shell> create_clock -period 40 waveform {0 20} clk1

dc_shell> create_clock -period 40 -waveform {15 35} clk2

Design Compiler自动地得到一个最大路径延迟约束:(35-20)-(终点库的寄存器的建立时间)。指定一个最大路径延迟为10,输入:

dc_shell> set_max_delay 10 -from reg1 -to reg2

Design Compiler以10-(终点库的寄存器的建立时间)来计算最大路径延迟约束,没有考虑最初得到的最大路径延迟约束。

(2)寄存器到端口的路径

Design Compiler利用下列方程式得到寄存器到端口路径的最小和最大路径延迟的约束:

min_delay = period - output_delay

max_delay = period - output_delay

如果你用set_min_delay或set_max_delay命令,这些命令中定义的值将代替约束计算中的周期值。比如,假设你有一个时间时钟周期为20的设计,输出OUTPORTA的输出延迟为5:

dc_shell> create_clock -period 20 CLK

dc_shell> set_output_delay 5 -clock CLK OUTPORTA

Design Compiler自动地得到最大路径延迟约束15(20-5)。指定你想要的最大路径延迟10,输入:

dc_shell> set_max_delay 10 -to OUTPORTA

Design Compiler计算最大路径延迟为5(10-5),没有考虑原先得到的最大路径延迟约束。

(3)异步路径

你也可以用set_max_delay和set_min_delay命令来约束穿越不同频率域的异步路径。

比如:

dc_shell>set_max_delay 17.1 \-from find(clock, clk1) -to find(clock, clk2)

dc_shell> set_max_delay 23.5 \-from find(clock, clk2) -to find(clock, clk3) dc_shell> set_max_delay 31.6 \-from find(clock, clk3) -to find(clock, clk1) (4)设置多循环路径

当有疑问的路径长于单个循环或数据并没有如期的在单个循环内,多循环路径条件是适当的。用set_multicycle_path命令来指定Design Compiler使用的时钟循环的数目,来决定在特殊的终点什么时候需要数据。

你可以为建立和保持检测指定循环乘法器。如果你没有为命令set_multicycle_path 指定-setup或-hold选项,Design Compiler只将乘数值应用于建立检查。

默认情况下,在数据从起点开始,到终点下一个时钟的活跃沿检查建立(默认乘数为1)。在数据建立后数据保持一个时钟循环,但在建立时的那个沿检测(默认乘数为0)。

图5.7显示了建立和保持时间之间的时序关系。

图5.7 建立和保持时间

时序路径从时钟管脚FF1(CLKA的上升沿)开始,结束于数据管脚FF2。假设触发器是正沿触发的,数据的建立从时间0开始,然后20时间单位后在FF2的CLKB的下一个有效沿检测数据;数据的保持从一个时钟(CLKA)循环开始(20单位),在检测建立的相同沿时检测(20单位)。

set_multicycle_path命令的-setup选项在默认沿的前或后移走用于建立检测的沿。如图5.7所示的例子,

?零的建立乘数意味着Design Compiler利用零时刻的沿检测

? 2的建立乘数意味着Design Compiler利用40时刻的沿检测

set_multicycle_path命令的-hold选项在默认沿的前后开始数据的保持,但Design Compiler仍然在检测建立的沿检测数据的保持。如图5.7所示(默认的建立乘数),

? 1的保持乘数意味着数据从CLKA(时间40)开始保持到CLKB(时间20)检测

?-1的保持乘数意味着数据从CLKA(时间0)开始保持到CLKB(时间20)检测用带有相同选项的reset_path命令来取消set_multicycle_path命令。

(5)采用多重的时序异常命令

一个特殊的时序异常命令用于一个单独的时序路径,而一个一般的时序异常命令用于更多的时序路径。如果你对更多的实例执行给定的时序异常命令,那么更多的特殊命令将覆盖更多的一般的命令。

下列规则定义了给定时序异常命令的优先顺序:

?当你定义从一个管脚到另一个管脚的时序异常时,享有最高优先权

?一个使用-from选项的命令比一个使用-to选项的命令享有更高的优先权

?对于时序异常命令中的时钟,如果同时指定了-from和-to选项, 它们将覆盖只指定了-from或-to选项的共有同样路径的命令

这个列表详细列出了由这些优先权规则定义的优先顺序:

1. command -from pin -to pin

2. command -from clock -to pin

3. command -from pin -to clock

4. command -from pin

5. command -to pin

6. command -from clock -to clock

7. command -from clock

8. command -to clock

比如,在下列命令序列中,从A到B的路径被看作是两循环路径,因为特殊命令覆盖了一般命令:

dc_shell> set_multicycle_path 2 -from A -to B

dc_shell> set_multicycle_path 3 -from A

下列规则总结了时序异常命令的相互作用:

?一般的set_false_path覆盖特殊的set_multicycle_path命令

?一般的set_max_delay覆盖特殊的set_multicycle_path命令

?特殊的set_false_path覆盖特殊的set_max_delay或set_min_delay 命令

?特殊的set_max_delay命令覆盖特殊的set_multicycle_path命令

5-3-2 设置面积约束

命令set_max_area通过对当前设计设置一个max_area属性,为当前设计指定最大面积。用工艺库里面积的单位来指定这个面积。比如,想要设置最大面积为100,输入:

dc_shell> set_max_area 100

设计面积由每一个元件和线的面积组成。在Design Compiler计算设计面积时将忽视下列元件:

?未知元件

?未知面积的元件

?独立于工艺的普通元件

单元(元件)的面积是与工艺相关的;Design Compiler从工艺库里获取信息。

当你同时定义时序和面积约束,Design Compiler将首先去满足时序约束。当你定义面积约束时,使用-ignore_tns选项将面积约束的优先权提到全部的消极的延迟之前:

dc_shell> set_max_area -ignore_tns 100

为最优化得到最小的面积,需要忽略时序,移走所有的约束,只留下最大面积约束。用命令remove_constraint来移走你设计的约束。但要当心这个命令将移走你设计中的所有最优化约束。

第四节设计优化

最优化是Design Compiler综合步骤,根据设计的功能、速度和面积要求,将设计映射到指定目标库中单元的最佳组合。这一节中将讨论影响最优化结果的众多因素中的常见的几个因素。

5-4-1 理解最优化流程

Design Compiler执行三个级别的最优化:

?结构最优化(Architectural optimization)

?逻辑级最优化(Logic-level optimization)

?门级最优化(Gate-level optimization)

5-4-1-1 结构最优化

对HDL描述进行结构最优化,它包含这样的高层综合任务,如:

?子表达式共享

?资源共享

?选择设计工具实现

?算子重排序

?确定数据流的算术表达式(DC Ultra only)

除了设计工具实现外,这些高层综合任务只在一个未映射的设计的最优化时才发生,设计工具实现可以在门级映射后重现。

高层综合任务以你的约束和HDL编码风格为基础。在高层最优化后,电路的功能由一个一般的、与工艺无关的网表来描述。

5-4-1-2 逻辑级最优化

对GTECH网表进行逻辑级最优化,它由下列两个过程组成:

●结构化(Structuring)

这个过程是对设计增加中间变量和逻辑结构,导致设计面积简化。结构化

是基于约束的,最好应用于非关键时序路径。

在结构化过程中,Design Compiler搜索能够成为因素的子功能,并且根据这个因素的大小和在设计中出现的次数来评估因素。默认情况下,Design Compiler构造设计的结构。用命令set_structure和变量compile_new_boolean_structure来控制设计的结构化。命令set_structure和它的选项设置下列的属性:structure,structure_boolean,和structure_timing。

●展开化(Flattening)

这个过程试图把组合逻辑路径转换为两级的乘积和表达式。展开化与约束

无关。因为它产生只有两级的组合逻辑,因此对速度的最优化有用。在展开化过程中,Design Compiler移走设计中所有的中间变量和与之有关联的逻辑结构。然而,因为需要大量的CPU时间和增加面积,展开化并不总是实用的。默认情况下,Design Compiler并不进行展开化。用命令set_flatten来控制设计的展开化。用命令set_flatten和它的选项设置下列属性:flatten、 flatten_effort、flatten_minimize、flatten_phase。展开化并不瓦解设计的层次,在Design Compiler中,用ungroup命令来移走设计的层次。

结构化和展开化属性使得细微调谐的最优化技术应用于设计层次中的每一个设计。表5.3列出了这些属性的默认值。

表5.3 结构化和展开化属性

用命令report_compile_options显示当前设计的这些属性。

5-4-1-3 门级最优化

门级最优化是对由逻辑综合产生的一般的网表工作来产生特殊工艺的网表。它包含下列步骤:

●映射(Mapping)

这个步骤是利用目标工艺库里的门(组合的和时序的)来产生设计的门级

实现,试图满足时序和面积要求。你可以利用不同的compile命令选项来控制Design Compiler利用的映射算法。

●延迟最优化(Delay Optimization)

这个过程试图修理由映射过程引进的延迟错误。延迟最优化不去弥补设计

规则错误或去满足面积约束。

●设计规则弥补(Design Rule Fixing)

这个过程通过插入缓冲或调整单元的大小试图弥补设计规则错误。Design Compiler试图弥补这些错误而不影响时序和面积的结果,但如果有必要,它会干扰最优化约束。

●面积最优化(Area Optimization)

在完成映射、延迟最优化和设计规则弥补之后,这个过程试图满足面积约

束。然而,为满足面积约束,不允许引进设计规则或延迟约束错误。

你可通过set_cost_priority命令来改变约束的优先权。在运行compile命令时指定-no_design_rule选项使设计规则弥补失效。然而,如果你用这个选项,综合过的设计可能会违反设计规则。

5-4-2 选择和使用编译策略

你可以选用不同的策略来编译你的层次设计。基本的策略是:

?自顶向下编译(Top-down compile):顶层设计和所有的子设计一起编译

?从上到下编译(Bottom-up compile):单独编译单一的子设计,从层次的底层,按层次的级别进行,直到编译顶层设计

?混合编译(Mixed compile):无论自顶向下还是从下到上,只要是最合适的,就应用于

单一的子设计

在下面的内容中,将以图5.8所示的简单设计为例来示范自顶向下和从下到上的编译策略:

图5.8 Design to Illustrate Compile Strategies 表5.4中列出了设计的顶层或全局的规范,适用于TOP和它所有的子设计。

表5.4 Design Specifications for Design TOP

下面是设计TOP的约束文件:

set_operating_conditions WCCOM

set_wire_load_model “20x20”

create_clock -period 25 clk

set_input_delay 3 -clock clk all_inputs()-find(port, clk)

set_output_delay 2 -clock clk all_outputs()

set_load 1.5 all_outputs()

set_driving_cell -cell IV all_inputs()

set_drive 0 clk

5-4-2-1 自顶向下编译

自顶向下编译策略有如下优点:

?提供了一种按钮式的方法

?自动的照顾内部模块的从属性

对于超过100K门的设计,自顶向下的编译策略要求更多的内存并可能导致更长的运行时间。

实现一个自顶向下的编译,执行下列步骤:

●读入整个设计

●分解任何一个设计基准的多重实例

●将属性和约束应用于顶层

●编译设计

下面是对设计TOP进行自顶向下编译的脚本。这个脚本包括确定每一个步

骤的注释。

/* read in the entire design */

read -f verilog E.v

read -f verilog D.v

read -f verilog C.v

read -f verilog B.v

read -f verilog A.v

read -f verilog TOP.v

current_design TOP

link

/* resolve multiple references */

uniquify

/* apply constraints and attributes */

include defaults.con

/* compile the design */

compile

5-4-2-2 从下到上编译

从下到上编译策略有如下优点:

?利用divide-and-conquer方法编译大的设计

?比自顶向下编译,内存的要求更小

?允许时间预算

?重复直到接口稳定

?人为的修改控制

从下到上编译策略单独地编译子设计,然后在顶层设计中合并。应用顶层约束,检测设计是否有错误。即使有可能没有错误展现,这也是靠不住的,因为子设计之间设置的接口通常在开始不是那么准确。

为改进内在模块约束的准确性,你读入顶层设计和所有的子设计,然后对子设计的单

一的单元实例应用characterize命令。在编译过的子设计提供的更多的接近现实的信息的基础上,characterize捕获每一个单元实例的环境和时序信息,然后用新值替代现存的属性和约束。

采用改进过的约束,重新编译子设计,并再次检测顶层设计。你应该了解改进过的结果,但你可能要几次反复整个过程来移走所有重要的错误。

从下到上编译策略要求下列步骤:

1.发展一个默认的约束文件和一个子设计明确的约束文件。默认的约束文件包括全局的约束,诸如时钟信息、驱动和负载预计。子设计明确的约束文件则反映了分配给子模块的时序预算。

2.独立地编译子设计

3.读入顶层设计和已经编译过的但不在内存中的子设计

4.设置顶层设计为当前设计,链接设计,应用顶层约束

如果设计满足约束,结束;否则,继续下列步骤。

5.对最差情况的单元实例应用characterize命令

6.用write_script来保存单元的特性信息

当你重新编译子设计时,应用该脚本来重新产生新的属性值。

7.用remove_design -all来移走内存中的所有设计

8.读入先前特性化过的单元的RTL级设计

重新编译RTL设计,而不是单元映射后的设计,可能导致更好的优化结果。

9.设置特性化的单元的子设计为当前设计,利用保存的特性数据的脚本重新编译。

10.读入所有其他编译过的子设计

11.链接当前设计

12.选择其他子设计,重复步骤3到步骤9,直到你利用它们真实的情况来重新编译过所有的子设计

在应用从下到上的编译策略时,注意下列情况:

●命令read_file可以更为快捷地读入.db格式。如果在首次读入RTL级代码

后,你不愿意修改它,保存这个未映射的设计为一个.db文件。在你重新读入这个设计时将节省不少时间。

●compile命令影响当前设计的所有子设计。如果你只想优化当前设计,你

可以在你的数据库中移走或不包括它的子设计,或者对子设计设置dont_touch属性。

下面是对设计TOP执行从下到上的编译的脚本文件:

all_blocks = {E,D,C,B,A}

/* compile each subblock independently */

foreach (block, all_blocks) {

/* read in block */

block_source = block + ".v"

read_file -format verilog block_source

current_design block

link

uniquify

/* apply global attributes and constraints */ include defaults.con

/* apply block attributes and constraints */ block_script = block + ".con"

include block_script

/* compile the block */

compile

}

/* read in entire compiled design */

read_file -format verilog TOP.v

current_design TOP

link

write -hierarchy -output first_pass.db

/* apply top-level constraints */

include defaults.con

include top_level.con

/* check for violations */

report_constraint

/* characterize all instances in the design */ all_instances = {U1,U2,U2/U3,U2/U4,U2/U5} characterize -constraint all_instances

/* save characterize information */

foreach (block, all_blocks) {

current_design block

char_block_script = block + ".wscr"

write_script > char_block_script

}

/* recompile each block */

foreach (block, all_blocks) {

/* clear memory */

remove_design -all

/* read in previously characterized subblock */

block_source = block + ".v"

read -format verilog block_source

/* recompile subblock */

current_design block

link

uniquify

/* apply global attributes and constraints */

include defaults.con

/* apply characterization constraints */

char_block_script = block + ".wscr"

include char_block_script

/* apply block attributes and constraints */

block_script = block + ".con"

include block_script

/* recompile the block */

compile

}

5-4-2-3 混合编译策略

你可以同时采用两种策略来获得两种策略的优点:

●对层次较少的模块应用自顶向下的编译策略

●应用从下到上的编译策略将层次较少的和更大的模块结合

图5.9显示了一个混合编译策略的例子。

图5.9 混合编译策略

5-4-3 分解一个设计基准的多重实例

在一个层次化设计中,子设计常常被多于一个的实例所引用。图5.10所示的设计top,其中设计C被引用了两次(U2/U3 and U2/U4)。

图5.10 Multiple Instances of a Design Reference 你必须在运行compiler命令前分解这些多重实例。你可以使用如下的方法:

? uniquify

? compile-once-don’t-touch

? ungroup

5-4-3-1 uniquify

如果被多次引用设计的实例的周围环境很不一致,采用uniquify来分解多重实例。这个方法包括使用uniquify命令来复制和重新命名被多重引用的设计,以致每一个实例引用一个唯一的设计。然后Design Compiler才能根据它的单元实例的唯一的环境对每一个设计副本进行最优化。

默认情况下,uniquify命令将贯穿整个当前设计对所有的多重实例(除了那些赋予dont_touch属性的)创建唯一的设计副本。你也可以用-reference选项来创建指定引用的唯一的副本;或者用-cells选项指定特殊的单元。Design Compiler对那些带有-reference 或-cells选项的指定的单元制造唯一的副本,即使它们被赋予了dont_touch属性。

Design Compiler用uniquify_naming_style变量中指定的命名习惯来产生子设计每一个副本的名字。默认的命名习惯是:

%s_%d

%s:子设计的原始名称(或-base_name选项指定的名称)

%d:形成唯一子设计名称的最小的整数值

你可以用uniquify命令仅仅分解多重设计引用,或者对分解后的当前设计重新进行编译。

比如,下面的命令序列分解了设计top中设计C的多重引用;用uniquify命令通过复制

管理会计应用指引第504号——约束资源优化

附件4: 管理会计应用指引第504号——约束资源优化 第一章总则 第一条约束资源优化,是指企业通过识别制约其实现生产经营目标的瓶颈资源,并对相关资源进行改善和调整,以优化企业资源配置、提高企业资源使用效率的方法。 约束资源,是指企业拥有的实际资源能力小于需要的资源能力的资源,即制约企业实现生产经营目标的瓶颈资源,如流动资金、原材料、劳动力、生产设备、技术等要素及要素投入的时间安排等。 第二条约束资源优化一般适用于企业的投融资管理和营运管理等领域。 第二章应用环境 第三条企业应用约束资源优化工具方法,约束资源的缺口一般应相对稳定。 第四条企业应用约束资源优化工具方法,相关数据一般应完整并可获取,必要时提供信息技术的支持。 第三章应用程序 第五条企业应用约束资源优化工具方法,一般按照识别约束资

源、寻找突破方法、协同非约束资源、评价实施效果等程序进行。 第六条企业应用约束资源优化工具方法,应识别出管理过程中制约既定目标实现的约束资源,并对约束资源进行定量分析。在约束资源难以进行定量分析时,可以通过内部评审法、专家评价法等,识别出管理过程中的约束资源。 内部评审法,是指企业通过内部组织开展评议、审查识别约束资源的方法。企业通常应组建满足约束资源识别所需的,由财务部门、生产部门和其他相关部门人员组成的内部评审小组或类似评审组织,通过集中研讨等方式,识别出管理过程中的约束资源。 专家评价法,是指利用专家的经验、知识等识别约束资源的方法。对于企业既定目标的实现形成重大制约影响的约束资源,企业通常采用此方法进行综合评判。 第七条在识别约束资源的基础上,企业应比较约束资源的资源能力差距,搜集约束资源的相关数据等信息,系统分析约束资源形成的原因和涉及的实施责任主体,制定约束资源优化的实施方案,建立实现约束资源优化的长效机制,促进约束资源的资源能力提升。 (一)当约束资源是流动资金时,通常采取企业资金内部调剂、缩短应收账款回收周期、加快存货周转、延长付款周期等方法消除流动资金缺口,也可以通过外部融资扩大企业的资金来源,如债务融资、权益融资等。 (二)当约束资源是原材料时,通常采取设置库存缓冲,确保原材料的及时供应等方法消除原材料缺口。

约束最优化问题

约束最优化问题 一实习目的 1.熟练掌握科学与工程计算中常用的基本算法; 2.掌握分析问题,设计算法的能力; 3.掌握模块化程序设计的基本思想,注重模块的“高内聚,低耦合”; 4.采用自顶向下,逐步细化的编程思想完成程序书写; 5.牢固建立“清晰第一,效率第二”的软件设计观念; 6.掌握软件调试,测试的基本技能和方法; 7.提高科技报告的书写质量; 8.在掌握无约束最优化问题求解方法的前提下,对一般情形下的约束最优化问题进行研究,通过实习掌握外点罚函数法、内点罚函数法、乘子法、线性近似规划法和序列二次规划法在求解一般情形下的约束最优化问题的应用。 二问题定义及题目分析 问题1: 要求用外点罚函数法和内点罚函数法解决约束问题: Min f(x)=错误!未找到引用源。 s.t. 错误!未找到引用源。 错误!未找到引用源。 错误!未找到引用源。 问题2: 要求用乘子法解决约束问题: Min 错误!未找到引用源。 s.t. 错误!未找到引用源。 错误!未找到引用源。 (错误!未找到引用源。) 问题3: 要求用线性近似规划法和序列二次规划法解决约束问题: Min 错误!未找到引用源。 s.t. 错误!未找到引用源。 错误!未找到引用源。 错误!未找到引用源。 错误!未找到引用源。 三程序概要设计 1.外点罚函数法 Step1. 给定初始点错误!未找到引用源。,罚参数序列{错误!未找到引用源。}(常取错误!未找到引用源。),精度错误!未找到引用源。,并令k=0;

Step2. 构造增广目标函数错误!未找到引用源。; Step3. 求解无约束优化问题min 错误!未找到引用源。,x错误!未找到引用源。,其解记为错误!未找到引用源。; Step4. (终止准则:惩罚项充分小,或等价地错误!未找到引用源。近似可行)若错误!未找到引用源。,或者错误!未找到引用源。,错误! 未找到引用源。,则得解错误!未找到引用源。,否则令k=k+1,转 Step2. 2.内点罚函数法: Step1. 给定初始可行解错误!未找到引用源。,罚参数序列{错误!未找到引用源。}(常取错误!未找到引用源。),精度错误!未找到引用源。,并令 k=0; Step2. 构造增广目标函数错误!未找到引用源。; Step3. 求解无约束优化问题min 错误!未找到引用源。,x错误!未找到引用源。,其解记为错误!未找到引用源。; Step4. (终止准则)若错误!未找到引用源。,则得解错误!未找到引用源。,否则令k=k+1,转 Step2. 3.乘子法: Step1. 给定初始点错误!未找到引用源。,初始lagrange乘子错误!未找到引用源。,i错误!未找到引用源。罚参数序列{错误!未找到引用源。}, 精度错误!未找到引用源。,并令k=0; Step2. 构造增广目标函数错误!未找到引用源。 Step3. 求解无约束优化问题min 错误!未找到引用源。,x错误!未找到引用源。,其解记为错误!未找到引用源。; Step4. (终止准则)若错误!未找到引用源。,则得解错误!未找到引用源。,否则令 K=k+1,转Step2. 4.线性近似规划法: Step1. 给定初始点错误!未找到引用源。,步长限制错误!未找到引用源。,缩小系数错误!未找到引用源。。精度错误!未找到引用源。,并令k=0;Step2. 求解线性规划问题:min 错误!未找到引用源。

管理会计应用指引第504号——约束资源优化

1 附件4: 管理会计应用指引第504号——约束资源优化 第一章总则 第一条约束资源优化,是指企业通过识别制约其实现生产经营目标的瓶颈资源,并对相关资 源进行改善和调整,以优化企业资源配置、提高企业资源使用效率的方法。 约束资源,是指企业拥有的实际资源能力小于需要的资源能力的资源,即制约企业实现生产 经营目标的瓶颈资源,如流动资金、原材料、劳动力、生产设备、技术等要素及要素投入的 时间安排等。 第二条约束资源优化一般适用于企业的投融资管理和营运管理等领域。 第二章应用环境 第三条企业应用约束资源优化工具方法,约束资源的缺口一般应相对稳定。 第四条企业应用约束资源优化工具方法,相关数据一般应完整并可获取,必要时提供信息技 术的支持。 第三章应用程序 第五条企业应用约束资源优化工具方法,一般按照识别约束资 2 源、寻找突破方法、协同非约束资源、评价实施效果等程序进行。 第六条企业应用约束资源优化工具方法,应识别出管理过程中制约既定目标实现的约束资源,并对约束资源进行定量分析。在约束资源难以进行定量分析时,可以通过内部评审法、专家 评价法等,识别出管理过程中的约束资源。 内部评审法,是指企业通过内部组织开展评议、审查识别约束资源的方法。企业通常应组建 满足约束资源识别所需的,由财务部门、生产部门和其他相关部门人员组成的内部评审小组 或类似评审组织,通过集中研讨等方式,识别出管理过程中的约束资源。 专家评价法,是指利用专家的经验、知识等识别约束资源的方法。对于企业既定目标的实现 形成重大制约影响的约束资源,企业通常采用此方法进行综合评判。 第七条在识别约束资源的基础上,企业应比较约束资源的资源能力差距,搜集约束资源的相 关数据等信息,系统分析约束资源形成的原因和涉及的实施责任主体,制定约束资源优化的 实施方案,建立实现约束资源优化的长效机制,促进约束资源的资源能力提升。 (一)当约束资源是流动资金时,通常采取企业资金内部调剂、缩短应收账款回收周期、加 快存货周转、延长付款周期等方法消除流动资金缺口,也可以通过外部融资扩大企业的资金 来源,如债务融资、权益融资等。 (二)当约束资源是原材料时,通常采取设置库存缓冲,确保原材料的及时供应等方法消除 原材料缺口。 3 (三)当约束资源是劳动力时,通常采取招聘新员工、增设新岗位、其他岗位借调等方法消 除劳动力瓶颈。 (四)当约束资源是生产设备时,通常采取提前安排设备购置计划、或寻找委托加工方式补 充产能的不足。 (五)当约束资源是技术时,通常采取技术研发、引进新技术等方法来消除技术瓶颈。 (六)当约束资源是要素投入的时间时,通常在明确各项作业的关键路线和关键工序的基础上,重新安排各项作业的工作流程,利用时间缓冲进行优化,确保要素投入的时间不受影响。

约束优化设计

行域 φ 内,选择一个初始点 X 然后确定一个可行 得一个目标函数有所改善的可行的新点 X 即完成了 第四章 约束优化设计 ● 概述 ● 约束坐标轮换法 ● 随机方向法 ● 罚函数法 概述 结构优化设计的问题,大多属于约束优化设计问题,其数学模型为: s .t . min f (x ) g u (x ) ≤ 0 h v (x ) = 0 x ∈ R n u = 1, 2,..., m v = 1, 2,..., p < n 根据求解方式的不同,可分为直接解法和间接解法两类。 直接解法是在仅满足不等式约束的可行设计区域内直接求出问题的约束最优解。属于 这类方法的有:随机实验法、随机方向搜索法、复合形法、可行方向法等。其基本思路: 在由 m 个不等式约束条件 gu(x )≤0 所确定的可 0 搜索方向 S ,且以适当的步长沿 S 方向进行搜索,取 1 一次迭代。以新点为起始点重复上述搜索过程,每次 均按如下的基本迭代格式进行计算: X k+1=X k +α k S k (k=0,1,2,..) 逐步趋向最优解, 直到满足终止准则才停止迭代。 直接解法的原理简单,方法实用,其特点是: 1) 由于整个过程在可行域内进行,因此,迭代计算 不论何时终止,都可以获得比初始点好的设计点。 2) 若目标函数为凸函数,可行域为凸集,则可获得全域最优解,否则,可能存在多个局 部最优解,当选择的初始点不同,而搜索到不同的局部最优解。 3) 要求可行域有界的非空集

φ(X,μ1,μ2)=F(X)+∑μ 1 G??g j X)??+∑μ2H??h k(X)?? a)可行域是凸集;b)可行域是非凸 集 间接解法 间接解法是将约束优化问题转化为一系列无约束优化问题来解的一种方法。由于间接解法可以选用已研究比较成熟的无约束优化方法,并且容易处理同时具有不等式约束和等式约束的问题。因而在机械优化设计得到广泛的应用。 间接解法中具有代表性的是惩罚函数法。将约束函数进行特殊的加权处理后,和目标函数 结合起来,构成一个新的目标函数,即将原约束优化问题转化为一个或一系列的无约束优 化问题。 m l j=1k=1 新目标函数 然后对新目标函数进行无约束极小化计算。 加权因子 间接法是结构优化设计中广泛使用的有效方法,其特点: 1)由于无约束优化方法的研究日趋成熟,为间接法提供可靠基础。这类算法的计算效率和数值计算的稳定性大有提高; 2)可以有效处理具有等式约束的约束优化问题; 3)目前存在的主要问题,选取加权因子较为困难,选取不当,不仅影响收敛速度和计算精度,甚至导致计算失败。

第五章 综合的约束与优化

第五章综合的约束与优化 综合的一个很重要的概念就是:单纯的映射是远远不够的,更重要的是设计的整体优化。一方面设计工程师为综合规定必要的约束,例如对面积、速度、功耗的要求等,从而使优化有所依据;另一方面选择合适的综合器是优化程度的决定性因素。同一个设计使用不同的综合器所得到的优化结果可以相差3~5倍。 第一节综合约束 5-1-1 概述 综合约束是对可测量的电路特性所定义的设计目标,比如面积、速度和电容等。如果没有这些约束,Design Compiler工具将不能有效地对你的设计进行最优化。 在对设计进行优化时,Design Compiler支持两种类型的约束: ●设计规则约束(Design rule constraints) ●最优化约束(Optimization constraints) 设计规则约束是固有的,在工艺库里定义;这些约束条件是为了保证设计 的功能正确性,适用于使用工艺库的每一个设计;可以使这些约束比最优化约束更为严格。 最优化约束是外在的,由设计者自己定义;最优化约束描述设计指标,在整个dc_shell 工作期间应用于当前设计;它们必须接近于现实情况。 Design Compiler试图同时满足设计规则约束和最优化约束,但设计规则约束必须首先被满足。设计者可以以命令行形式交互式的指定约束或者在一个约束文件里指令约束。 图5.1显示了主要的设计规则约束和最优化约束,以及如何用dc_shell界面命令来设置这些约束。

图5.1 Major Design Compiler Constraints 第二节设置设计规则约束 这一节将讨论最常用的设计规则约束: ?转换时间(Transition time) ?扇出负载(Fanout load) ?电容(Capacitance) Design Compiler给设计对象赋予属性来表示这些设计规则约束。表5.1列出了每一个设计规则约束对应的属性名。 表5.1 设计规则属性 设计规则约束是工艺库里指定属性,你也可以明确地、随意地指定这些约束。如果工艺库里定义了这些属性,在进行设计编译和生成约束报告时,Design Compiler暗中将它们应用于使用那个库的任何设计。你不能移走工艺库里定义的设计规则约束,因为它们是工艺的特定要求,但你可以使它们更为严格来适应你的设计。如果内在的和外在的设计规则约束同时应用于一个设计或一条线,更为严格的值拥有优先权。 5-2-1 设置转换时间约束 线的转换时间约束是对它的驱动管脚改变逻辑值的时序要求。转换时间是以工艺库数

资源约束条件下工期、质量、成本综合均衡优化

资源约束条件下工期、质量、成本综合均衡优化工期、成本和质量称为工程项目的三大控制目标, 三者之间相互依存、相互影响, 形成一个辩证的统一体. 因此, 必须对工期、质量、成本进行综合、均衡、统筹考虑. 由于受资金、人力、技术和地理环境等的制约, 在资源有限的约束条件下, 如何在三者之间取得平衡, 一直是业主、承包商、监理方共同关注的问题. 工程项目的工期、质量和成本三大目标之间的关系[1 ] , 如图1 所示. 网络计划问题是解决工程项目优化问题的基本方法.网络计划技术在解决工程费用、工期、资源等单目标优化问题方面, 带来了极大的方便. 然而, 现代的工程项目不单考虑工期、费用和资源均衡目标的优化, 还要综合考虑工程质量、安全和风险等诸多难以定量的因素, 甚至还要考虑在资源均衡、安全和风险约束下的工程质量、费用、工期的多目标优化问题, 网络计划技术在解决多个目标权衡的优化问题时效果往往不尽人意, 这就要求引入其它优化方法和技术综合加以解决. 国内外一些学者在质量成本、工期成本优化方面做了大量卓有成效的研究[1~ 6 ] , 而目前对工期、质量优化以及工期、质量、成本的综合优化问题研究较少, 尤其是对基于资源约束条件下的工程综合优化问题的研究更加少见. 文献[ 1 ]认为成本、工期和质量是评价建筑工程项目的主要指标, 文献[ 3 ]介绍了基于PERT(Program/Project Evaluation and Review Technique即计划评审技术)技术的工程项目工期、费用、质量控制模拟模型及风险分析方法, 文献[ 4 ]建立了线形模型来研究工期、成本以及质量之间的平衡关系. 文献[ 2 ]利用线

单纯形法解决无约束优化问题

分数: ___________ 任课教师签字:___________ 课程作业 学年学期:2017——2018学年第二学期 课程名称:优化理论 作业名称:作业三 学生姓名: 学号: 提交时间:

一、问题重述 形如的min (x),x R n f ∈问题称为无约束优化问题,常用下降算法来解决这类问题。下降算法的关键在于步长和搜索方向的选取。步长的求取可以借助前面作业中提到的一维搜索等方法求取,而搜索方向算法可以分为两大类,解析法和直接法。 解析法借助了目标函数的导数进行搜索,这类算法搜索速度快、效率高,但是对目标函数的要求更为严格。常用的方法有最速下降法、Newton 法、共轭梯度法、拟Newton 法等。 直接法不使用导数,也不需要得到目标函数的明确解析式,只需要能够得到某些函数上的点即可。因此直接法的适用范围更广,但相应的收敛速度会较慢,计算量也会随着问题维数的增加而迅速增大。常用的方法有单纯形法、Powell 方向加速法以及Powell 改进算法。 本作业以直接法的Powell 法为例,解决具体的无约束优化问题,并对将Powell 方向加速法和Powell 改进算法解决结果进行对比。 二、算法原理 对于n 维正定二次函数(x)0.5T T f x Gx b x c =++,设011,,...(k n)k p p p -<关于G 共轭,0x 与1x 为任意不同点。分别从0x 与1x 出发,依次沿011,,...k p p p -作一维搜索。如果最后找到两个互不相同的极小点x a 与x b ,则x b a x -与011,,...k p p p -关于G 共轭。 Powell 方向加速法正是基于这一原理,每次迭代过程作n+1次一维搜索。第一次沿给定的n 个线性无关的方向011,,...n p p p -依次作一维搜索,之后沿由这一阶段的起点到第n 次搜索所得到的点的方向P 再做一次一维搜索,并把这次所得点作为下一阶段的起点,下一阶段的n 个搜索方向为011,,...,n p p p p -。以此直到找到最优解。 此算法是在迭代中逐次生成共轭方向,而共轭方向又是较好的搜索方向,所以称之为方向加速法。但是,此算法产生的n 个向量可能线性或近似线性相关,这时张不成n 维空间,可能得不到真正的极小点。因此,Powell 原始算法存在一定的缺陷。 Powell 改进算法虽然不再具有二次终止性,但克服了搜索方向的线性相关的不利情形,是解决无约束优化问题较有效的直接法之一。 本次作业一维搜索的过程是利用函数求导,求得最小值。经过试验发现,α是允许为负数的。否则最终寻优得到的极值点与实际结果存在很大的偏差,而且寻优的效率特别低下。

五种最优化方法

五种最优化方法 1.最优化方法概述 最优化问题的分类 1)无约束和有约束条件; 2)确定性和随机性最优问题(变量是否确定); 3)线性优化与非线性优化(目标函数和约束条件是否线性); 4)静态规划和动态规划(解是否随时间变化)。 最优化问题的一般形式(有约束条件): 式中f(X)称为目标函数(或求它的极小,或求它的极大),si(X)称为不等式约束,hj(X)称为等式约束。化过程就是优选X,使目标函数达到最优值。 2.牛顿法 简介 1)解决的是无约束非线性规划问题; 2)是求解函数极值的一种方法: 3)是一种函数逼近法。 原理和步骤 3.最速下降法(梯度法) 最速下降法简介 1)解决的是无约束非线性规划问题; 2)是求解函数极值的一种方法; 3)沿函数在该点处目标函数下降最快的方向作为搜索方向; 最速下降法算法原理和步骤 4?模式搜索法(步长加速法) 简介 1)解决的是无约束非线性规划问题; 2)不需要求目标函数的导数,所以在解决不可导的函数或者求导异常麻烦的函数的优化问题时非常有效。 3)模式搜索法每一次迭代都是交替进行轴向移动和模式移动。轴向移动的目的 是探测有利的下降方向,而模式移动的目的则是沿着有利方向加速移动。

模式搜索法步骤 5.评价函数法 简介 评价函数法是求解多目标优化问题中的一种主要方法。在许多实际问题中,衡量一个方案的好坏标准往往不止一个,多目标最优化的数学描述如下: min (f_1(x),f_2(x),…,f_k(x)) .g(x)<=o 传统的多目标优化方法本质是将多目标优化中的各分目标函数, 经处理或数学变换,转变成一个单目标函数,然后采用单目标优化技术求解。常用的方法有“线性加权和法”、“极大极小法”、“理想点法”。选取其中一种线性加权 求合法介绍。 线性加权求合法 6.遗传算法 智能优化方法是通过计算机学习和存贮大量的输入-输出模式映射关系,进而达到优化的一种方法,主要有人工神经网络法,遗传算法和模拟退火法等。遗传算法基本概念 1.个体与种群 个体就是模拟生物个体而对问题中的对象 (一般就是问题的解)的一种称呼。种群就是模拟生物种群而由若干个体组成的群体,它一般是整个搜索空间的一个很小的子集。 2.适应度与适应度函数 适应度就是借鉴生物个体对环境的适应程度,而对问题中的个体对象所设计的表征其优劣的一种测度。 适应度函数就是问题中的全体个体与其适应度之间的一个对应关系。该函数就是遗传算法中指导搜索的评价函数。 遗传算法基本流程 的就是对一定数量个体组成的生物种群进行选择、交叉、变异等遗传操作,最终求得最优解或近似最优解。 遗传算法步骤

约束优化设计

第四章 约束优化设计 ● 概述 ● 约束坐标轮换法 ● 随机方向法 ● 罚函数法 概述 结构优化设计的问题,大多属于约束优化设计问题,其数学模型为: 根据求解方式的不同,可分为直接解法和间接解法两类。 直接解法是在仅满足不等式约束的可行设计区域内直接求出问题的约束最优解。属于这类方法的有:随机实验法、随机方向搜索法、复合形法、可行方向法等。其基本思路: 在由m 个不等式约束条件g u (x )≤0所确定的可行域φ内,选择一个初始点0 X 然后确定一个可行搜索方向S ,且以适当的步长沿S 方向进行搜索,取得一个目标函数有所改善的可行的新点1 X 即完成了一次迭代。以新点为起始点重复上述搜索过程,每次均按如下的基本迭代格式进行计算: k+1k k k =+S (k=0,1,2,..)X X α逐步趋向最优解, 直到满足终止准则才停止迭代。 直接解法的原理简单,方法实用,其特点是: 1) 由于整个过程在可行域内进行,因此,迭代计算不论何时终止,都可以获得比初始点好 的设计点。 2) 若目标函数为凸函数,可行域为凸集,则可获得全域最优解,否则,可能存在多个局部 最优解,当选择的初始点不同,而搜索到不同的局部最优解。 3) 要求可行域有界的非空集 1,2,...,1,2,...,u m v p n ==

间接解法 间接解法是将约束优化问题转化为一系列无约束优化问题来解的一种方法。由于间接解法可以选用已研究比较成熟的无约束优化方法,并且容易处理同时具有不等式约束和等式约束的问题。因而在机械优化设计得到广泛的应用。 间接解法中具有代表性的是惩罚函数法。将约束函数进行特殊的加权处理后,和目标函数结合起来,构成一个新的目标函数,即将原约束优化问题转化为一个或一系列的无约束优化问题。 然后对新目标函数进行无约束极小化计算。 间接法是结构优化设计中广泛使用的有效方法,其特点: 1) 由于无约束优化方法的研究日趋成熟,为间接法提供可靠基础。这类算法的计算效率和 数值计算的稳定性大有提高; 2) 可以有效处理具有等式约束的约束优化问题; 3) 目前存在的主要问题,选取加权因子较为困难,选取不当,不仅影响收敛速度和计算精 度,甚至导致计算失败。 a) 可行域是凸集;b)可行域是非凸集 () ()()()121211 ,,m l j k j k X F X G g X H h X φμμμμ==??=++? ?????∑∑ 新目标函数 加权因子

外点法求约束最优化问题

数学规划课程设计 题目外点法求约束最优化问题 姓名 学号 成绩

摘要 罚函数是应用最广泛的一种求解式的数值解法,基本思路是通过目标函数加上惩罚项,将原约束非线性规划问题转化为求解一系列无约束的极值问题。(这种惩罚体现在求解过程中,对于企图违反约束的那些迭代点,给予很大的目标函数值,迫使这一系列无约束问题的极小值或者无限地向可行解(域)逼近,或者一直保持在可行集(域)内移动,直到收敛于原来约束问题的极小值点。) 本文....... 外点法可用于求解不等式约束优化问题,又可用于求解等式约束优化问题,主要特点是惩罚函数定义在可行域的外部,从而在求解系列无约束优化问题的过程中,从可行域外部逐渐逼近原约束优化问题最优解。 关键词:罚函数法、约束最优化问题、外点法

一、预备知识(基本理论) 看下是否还有定理、定义等等,可以加一些 外点惩罚函数法的一般形式 考虑不等式约束优化设计时:对 ) ,2,1(,0)(. .), (min m u X g t s R x X f u n =≥∈ 构造一般形式的外点惩罚函数为: []2 1 } )(,0{min )(),(∑=+=m u u k k X g r X f r X P 其中: (1)当满足所有约束条件时惩罚项为0,即 []{}0 )(,0min 2 1 =∑=m u u k X g r (2)当 X 违反某一约束条件,即0 )(=∑=X g r X g r u k m u u k 表明X 在可行域外,惩罚项起作用,且若 X 离开约束边界越远,惩罚力度越大。这样用惩 罚的方法迫使迭代点回到可行域。 (3)惩罚因子k r 是一递增的正数数列,即 <<<<∑=p q v v k X h r 且 随着惩罚因子的增大而增大;

最优化方法试卷与答案5套

《最优化方法》1 一、填空题: 1.最优化问题的数学模型一般为:____________________________,其中 ___________称为目标函数,___________称为约束函数,可行域D 可以表示 为_____________________________,若______________________________, 称*x 为问题的局部最优解,若_____________________________________,称*x 为问题的全局最优解。 2.设f(x)= 212121522x x x x x +-+,则其梯度为___________,海色矩阵___________,令,)0,1(,)2,1(T T d x ==则f(x)在x 处沿方向d 的一阶方向导数为___________,几何意义为___________________________________,二阶 方向导数为___________________,几何意义为_________________________ ___________________________________。 3.设严格凸二次规划形式为: 012. .222)(min 21212 12 221≥≥≤+--+=x x x x t s x x x x x f 则其对偶规划为___________________________________________。

4.求解无约束最优化问题:n R x x f ∈),(min ,设k x 是不满足最优性条件的第k 步迭代点,则: 用最速下降法求解时,搜索方向k d =___________ 用Newton 法求解时,搜索方向k d =___________ 用共轭梯度法求解时,搜索方向k d =_______________ ____________________________________________________________。 二.(10分)简答题:试设计求解无约束优化问题的一般下降算法。 三.(25分)计算题 1. (10分)用一阶必要和充分条件求解如下无约束优化问题的最优解: )1(632)(m in 21212131----=x x x x x x x f . 2. (15分)用约束问题局部解的一阶必要条件和二阶充分条件求约束问题: 1)(. .)(min 22 2 1 2 1=-+==x x x c t s x x x f 的最优解和相应的乘子。 四. 证明题(共33分) 1.(10分)设δ++=x r Gx x x f T T 2 1 )(是正定二次函数,证明一维问题

Ch5_综合的约束与优化

`第五章综合的约束与优化 综合的一个很重要的概念就是:单纯的映射是远远不够的,更重要的是设计的整体优化。一方面设计工程师为综合规定必要的约束,例如对面积、速度、功耗的要求等,从而使优化有所依据;另一方面选择合适的综合器是优化程度的决定性因素。同一个设计使用不同的综合器所得到的优化结果可以相差3~5倍。 第一节综合约束 5-1-1 概述 综合约束是对可测量的电路特性所定义的设计目标,比如面积、速度和电容等。如果没有这些约束,Design Compiler工具将不能有效地对你的设计进行最优化。 在对设计进行优化时,Design Compiler支持两种类型的约束: ●设计规则约束(Design rule constraints) ●最优化约束(Optimization constraints) 设计规则约束是固有的,在工艺库里定义;这些约束条件是为了保证设计 的功能正确性,适用于使用工艺库的每一个设计;可以使这些约束比最优化约束更为严格。 最优化约束是外在的,由设计者自己定义;最优化约束描述设计指标,在整个dc_shell 工作期间应用于当前设计;它们必须接近于现实情况。 D esign Compiler试图同时满足设计规则约束和最优化约束,但设计规则约束必须首先被满足。设计者可以以命令行形式交互式的指定约束或者在一个约束文件里指令约束。 图5.1显示了主要的设计规则约束和最优化约束,以及如何用dc_shell界面命令来设置这些约束。

图5.1 Major Design Compiler Constraints 第二节设置设计规则约束 这一节将讨论最常用的设计规则约束: ?转换时间(Transition time) ?扇出负载(Fanout load) ?电容(Capacitance) Design Compiler给设计对象赋予属性来表示这些设计规则约束。表5.1列出了每一个设计规则约束对应的属性名。 表5.1 设计规则属性 Design Rule Constraint Attribute Name Transition time max_transition Fanout load max_fanout Capacitance max_capacitance min_capacitance Cell degradation cell_degradation Connection class connection_class 设计规则约束是工艺库里指定属性,你也可以明确地、随意地指定这些约束。如果工艺库里定义了这些属性,在进行设计编译和生成约束报告时,Design Compiler暗中将它们应用于使用那个库的任何设计。你不能移走工艺库里定义的设计规则约束,因为它们是工艺的特定要求,但你可以使它们更为严格来适应你的设计。如果内在的和外在的设计规则约束同时应用于一个设计或一条线,更为严格的值拥有优先权。 5-2-1 设置转换时间约束 线的转换时间约束是对它的驱动管脚改变逻辑值的时序要求。转换时间是以工艺库数

资源优化调度问题研究

资源优化调度问题研究 【摘要】资源优化调度问题是一个广泛存在的复杂系统问题,以物流配送和排课问题等的一类资源优化调度的典型问题,由其难解性引起了较为广泛的关注。本文以排课问题为例,提出了基于不等式方法的多目标遗传算法解决方案,对排课问题的研究具有重要的现实意义。 【关键词】资源优化调度问题;排课问题 1.资源优化调度问题概述 资源优化调度问题是工程领域的一个普遍问题,在工程实践中,资源的优化调度关系到整体的效率和效益,具有很高的研究和应用价值。资源优化调度一般涉及的变量较多,属于带约束的多目标优化问题,而物流配送等的一类问题区别于一般的多目标优化问题,具有以下几个特点: (1)这类资源优化调度问题是带约束的多目标优化问题,并且这些约束既包含常规约束,也包含动态约束,常规约束确定解的可行区域,动态约束则确定解的折中与妥协空间。 (2)这类资源优化调度问题在求解过程中,可行解不一定是合理的,最后寻求的更多是满意解。如在排课问题中,有一门课是一周上两次的,在解中,两次课刚好连在一起,这也是不合理的。 (3)这类资源优化调度问题在应用遗传算法求解的过程中,其基因存在唯一性,区别于一般的遗传算法应用问题。如货物配送地点与货物需求量的组合,课程与教师、班级的组合,这些都是唯一的。 (4)这类资源优化调度问题在资源的组合优化方面具有一定的可调整空间。因为这类问题涉及时间和人员等,所以在资源调度过程中,可以通过适当地增加或减少少量的时间或人员方面的资源,达到资源的充分和有效利用,从而提高效率和效益。 2.资源优化调动问题的描述 多目标优化问题(MOP)一般采用如下定义: 一般MOP由n个决策变量参数、k个目标函数和m个约束条件组成,目标函数、约束条件与决策变量满足一定的关系。最优化问题如下: 这里,x表示决策变量,y表示目标向量,X表示决策向量x形成的决策空间,Y表示目标向量y形成的目标空间,约束条件e(x)?燮0确定决策向量的可行取值范围。

7无约束最优化的解析法

第七章 无约束最优化的解析法 本章主要内容:最速下降法及其收敛性与收敛速度 Newton 切线法及其收敛性 与收敛速度 阻尼Newton 法 共轭梯度法及其收敛性 变度量 法、最小二乘法 教学目的及要求:掌握最速下降法并理解其收敛性与收敛速度,掌握Newton 切 线法并理解其收敛性与收敛速度,了解阻尼Newton 法;掌握 共轭梯度法并理解其收敛性;了解变度量法、最小二乘法。 教学重点:最速下降法. 教学难点:变度量法. 教学方法:启发式. 教学手段:多媒体演示、演讲与板书相结合. 教学时间:6学时. 教学内容: §7.1 最速下降法 考虑无约束最优化问题 m i n ()f x , (7.1.1) 其中:n f R R →具有一阶连续偏导数. 算法7-1(最速下降法) Step1 选取初始数据.选取初始点0x ,给定允许误差0ε>,令0k =. Step2 检查是否满足终止准则.计算()k f x ?,若()k f x ε?<,迭代终止,k x 为问题(7.1.1)的近似最优解;否则,转Step3. Step3 进行一维搜索.取()k k d f x =-?,求k λ和1k x +,使得 ()min ()k k k k k f x d f x d λλλ≥+=+, 1k k k k x x d λ+=+. 令:1k k =+,返回Step2. 特别地,考虑 1m i n ()2 T T f x x Qx b x c =++, (7.1.2) 其中,n n n x R Q R ?∈∈为正定矩阵,,n b R c R ∈∈.

设第k 次迭代点为k x ,从点k x 出发沿()k f x -?作一维搜索,得 1()k k k k x x f x λ+=-?, 其中k λ为最优步长.根据定理 6.1.1,有1()() 0T k k f x f x +??=.而(),n f x Q x b x R ?=+?∈, 所以1()()()k k k k f x f x Q f x λ+?=?-?,从而(()())()0T k k k k f x Q f x f x λ?-??=,而Q 正定,即()()0T k k f x Q f x ??>,故由上式解出 ()()()() T k k k T k k f x f x f x Q f x λ??=??, (7.1.3) 于是 1()()()()() T k k k k k T k k f x f x x x f x f x Q f x +??=-???, (7.1.4) 这是最速下降法用于问题(7.1.2)的迭代公式. 例1 用最速下降法求解问题 2212min ()4f x x x =+, (7.1.5) 其中12(,)T x x x =.取初始点(0)(1,1)T x =,允许误差0.1ε=. 解 问题(7.1.5)中的f 是正定二次函数,且 800,,0020Q b c ????=== ? ????? . f 在点12(,)T x x x =处的梯度12()(8,2)T f x x x ?=. 第一次迭代: 令搜索方向(0)(0)()(8,2)T d f x =-?=--, (0)d ε==>, 从点(0)x 出发沿(0)d 作一维搜索,由(7.1.3)式和(7.1.4)式有 0680.130769520 λ==, (1)(1,1)0.130769(8,2)(0.046152,0.738462)T T T x =+--=-.

天津大学-研究生-最优化方法复习题

《最优化方法》复习题 第一章 概述(包括凸规划) 一、 判断与填空题 1 )].([arg )(arg m in m ax x f x f n n R x R x -=∈∈ √ 2 {}{}.:)(min :)(max n n R D x x f R D x x f ?∈-=?∈ ? 3 设.:R R D f n →? 若n R x ∈*,对于一切n R x ∈恒有)()(x f x f ≤*,则称*x 为最优化问题 )(min x f D x ∈的全局最优解. ? 4 设.:R R D f n →? 若D x ∈*,存在*x 的某邻域)(*x N ε,使得对一切)(*∈x N x ε恒有)()(x f x f <*,则称*x 为最优化问题)(min x f D x ∈的严格局部最 优解. ? 5 给定一个最优化问题,那么它的最优值是一个定值. √ 6 非空集合n R D ?为凸集当且仅当D 中任意两点连线段上任一点属于D . √ 7 非空集合n R D ?为凸集当且仅当D 中任意有限个点的凸组合仍属于D . √ 8 任意两个凸集的并集为凸集. ? 9 函数R R D f n →?:为凸集D 上的凸函数当且仅当f -为D 上的凹函数. √ 10 设R R D f n →?:为凸集D 上的可微凸函数,D x ∈*. 则对D x ∈?,有).()()()(***-?≤-x x x f x f x f T ? 11 若)(x c 是凹函数,则}0)( {≥∈=x c R x D n 是凸集。 √ 12 设{}k x 为由求解)(min x f D x ∈的算法A 产生的迭代序列,假设算法A 为下降算法, 则对{} ,2,1,0∈?k ,恒有 )()(1k k x f x f ≤+ . 13 算法迭代时的终止准则(写出三种):_____________________________________。

天津大学《最优化方法》复习题(含答案)

天津大学《最优化方法》复习题(含答案) 第一章 概述(包括凸规划) 一、 判断与填空题 1 )].([arg )(arg min max x f x f n n R x R x -=∈∈ √ 2 {}{} .:)(m in :)(m ax n n R D x x f R D x x f ?∈-=?∈ ? 3 设.:R R D f n →? 若n R x ∈*,对于一切n R x ∈恒有)()(x f x f ≤*,则称*x 为最优化问题 )(min x f D x ∈的全局最优解. ? 4 设.:R R D f n →? 若D x ∈*,存在*x 的某邻域)(*x N ε,使得对一切 )(*∈x N x ε恒有)()(x f x f <*,则称*x 为最优化问题)(min x f D x ∈的严格局部最 优解. ? 5 给定一个最优化问题,那么它的最优值是一个定值. √ 6 非空集合n R D ?为凸集当且仅当D 中任意两点连线段上任一点属于D . √ 7 非空集合n R D ?为凸集当且仅当D 中任意有限个点的凸组合仍属于D . √ 8 任意两个凸集的并集为凸集. ? 9 函数R R D f n →?:为凸集D 上的凸函数当且仅当f -为D 上的凹函数. √ 10 设R R D f n →?:为凸集D 上的可微凸函数,D x ∈*. 则对D x ∈?,有).()()()(***-?≤-x x x f x f x f T ? 11 若)(x c 是凹函数,则}0)( {≥∈=x c R x D n 是凸集。 √ 12 设{}k x 为由求解)(min x f D x ∈的算法A 产生的迭代序列,假设算法A 为下降算法, 则对{}Λ,2,1,0∈?k ,恒有 )()(1k k x f x f ≤+ .

无约束优化方法(最速下降法_牛顿法)

第四章 无约束优化方法 ——最速下降法,牛顿型方法 概述 在求解目标函数的极小值的过程中,若对设计变量的取值范围不加限制,则称这种最优化问题为无约束优化问题。尽管对于机械的优化设计问题,多数是有约束的,无约束最优化方法仍然是最优化设计的基本组成部分。因为约束最优化问题可以通过对约束条件的处理,转化为无约束最优化问题来求解。 为什么要研究无约束优化问题? (1)有些实际问题,其数学模型本身就是一个无约束优化问题。 (2)通过熟悉它的解法可以为研究约束优化问题打下良好的基础。 (3)约束优化问题的求解可以通过一系列无约束优化方法来达到。 所以无约束优化问题的解法是优化设计方法的基本组成部分,也是优化方法的基础。 根据构成搜索方向所使用的信息性质的不同,无约束优化方法可以分为两类。 一:间接法——要使用导数的无约束优化方法,如梯度法、(阻尼)牛顿法、变尺度法、共轭梯度法等。 二:直接法——只利用目标函数值的无约束优化问题,如坐标轮换法、鲍威尔法单纯形法等。 无约束优化问题的一般形式可描述为: 求n 维设计变量 []1 2T n n X x x x R =∈ 使目标函数 ()min f X ? 目前已研究出很多种无约束优化方法,它们的主要不同点在于构造搜索方向上的差别。 无约束优化问题的求解: 1、解析法

可以利用无约束优化问题的极值条件求得。即将求目标函数的极值问题变成求方程 0)(min *=X f 的解。也就是求X*使其满足 解上述方程组,求得驻点后,再根据极值点所需满足的充分条件来判定是否为极小值点。但上式是一个含有n个未知量,n个方程的方程组,在实际问题中一般是非线性的,很难用解析法求解,要用数值计算的方法。由第二章的讲述我们知道,优化问题的一般解法是数值迭代的方法。因此,与其用数值方法求解非线性方程组,还不如用数值迭代的方法直接求解无约束极值问题。 2、数值方法 数值迭代法的基本思想是从一个初始点) 0(X 出发,按照一个可行的搜索方向) 0(d 搜索,确定最佳的步长0α使函数值沿) 0(d 方向下降最大,得到)1(X 点。依此一步一步 地重复数值计算,最终达到最优点。优化计算所采用的基本迭代公式为 ),2,1,0() () () 1( =+=+k d X X K K K K α (4.2) 在上式中, () K d 是第是 k+1 次搜索或迭代方向,称为搜索方向(迭代方向)。 由上面的迭代公式可以看出,采用数值法进行迭代求优时,需要确定初始点)(k X 、搜 索方向) (k d 和迭代步长K α,称为优化方法迭代算法的三要素。第三章我们已经讨论了 如何在搜索方向) (k d 上确定最优步长K α的方法,本章我们将讨论如何确定搜索方向) (k d 。 最常用的数值方法是搜索方法,其基本思想如下图所示: 0) (0) (0) (*2*1*=??=??=??n x X f x X f x X f

相关文档
最新文档