具体实施方案
在下面详细描述中,为了说明,参考了可以实践本发明的特定实施方案的所示附图。充分详细地描述了这些实施方案,以使本领域的技术人员能实践本发明。应该理解的是,本发明的不同实施方案尽管不同,但不必相互排斥。此外,在不违背本发明的范围的情况下,可以在其它实施方案中实现在此所描述的与一个实施方案相关的特定特征、结构、或特性。此外,应该理解的是,在不违背本发明的范围的情况下,可以改变每个所公开的实施方案中的个体元件的位置或排列。因而下面详细描述没有限制的意思,并且仅仅通过附加权利要求与权利要求所能享受的等价物的全部范围一起定义、适当地解释本发明的范围。在附图中,贯穿这些视图,相同的数字指代相同或类似功能。
本发明的实施方案包括包含在通过机器可读介质所提供的机器可执行指令中的特征、方法或过程。机器可读介质包括以机器(例如,计算机、网络设备、个人数字助理、制造工具、具有一组一个或多个处理器的任何设备等)可访问的形式提供(即,存储和/或传送)信息的任何机械装置。在示例性实施方案中,机器可读介质包括易失性和/或非易失性介质(例如,只读存储器(ROM)、随机访问存储器(RAM)、磁盘存储介质、光盘存储介质、闪存设备等)、以及电、光、声或其它形式的传播信号(例如,载波、红外线信号、数字信号等)。
利用这样的指令以使指令编程的通用或专用目的处理器执行本发明的实施方案的方法或过程。作为替代的,通过包含用于执行操作的硬件逻辑的特定硬件部件、或通过编程数据处理部件和特定硬件部件的任何组合执行本发明的实施方案的特征或操作。本发明的实施方案包括这里还描述的数字/模拟信号处理系统、软件、数据处理硬件、数据处理系统实现方法、以及各种处理操作。
一些图示出了本发明的实施方案的系统和装置的框图。一些图示出了用以说明用于这些实施方案的系统和装置的流程图。将参考框图中所示的系统/装置描述流程图的操作。然而,应该理解的是,可以通过系统和装置的实施方案执行流程图的操作,而不是参考附图所讨论的操作,并且参考该系统/装置所讨论的实施方案可以执行不同于参考流程图所讨论的操作。
在实施方案中,当燃料费函数既不是平滑的也不是凸起的时候,并且当存在四类约束时,约束遗传算法(CGA)进行动态经济负荷分配(DELD)是可行的。第一约束是负荷需求与所有发电机输出的总数是相等的。第二约束是每个发电机组具有输出上限和下限。第三约束是对发电机组的加速和减速速率的限制。第四并且是最后的约束包括发电机组的禁忌操作域。发明者已发现传统的遗传算法不能解决DELD问题的原因是它的遗传操作通过逐位的方式影响所给定的个体,并且不能将这些改变调整到包括在某些动态关系中的所有位。因为诸如初始化、交叉、以及突变等遗传操作是固有地不能处理动态约束,所以传统遗传算法不能解决DELD问题。他们通过逐个间隔的方式影响给定的个体或解决方案,而不关心所关注的时间间隔之前和之后出现的时间间隔,并且不能调整对于某些动态关系中必须包括的所有时间间隔发生的改变。CGA通过下列改变而解决该问题。首先,严重地约束初始化、交叉、以及突变操作使所有进化个体(或解决方案)在可行域内或附近。其次,偏移和试探式初始化确保一个真实的多样化初始群体。第三,对于交叉的可行性位置选择适应动态约束。第四,正和负突变操作保存燃料费并且获得负荷相等。
CGA自身可以解决所有四类这些约束,而不用包括额外最优化方法,诸如二次规划。CGA是灵活的,并且可以被改变以适应更多约束,诸如发电机的预定在线或离线状态、发电机的各种最小和最大输出、以及发电机的各种加速和减速速率。此外,CGA能够以并行模式运行,以更加加速优化过程。
本公开为诸如电力生产发电厂之类的发电机组提供了CGA,以解决DELD问题。CGA确定发电机输出的最佳时间表,从而以最小生产成本满足负荷需求,并且还满足系统与操作条件施加的各种约束。严重地约束CGA的初始化、交叉、以及突变,从而使所有进化个体在可行域内或附近。这使DELD在每个发电机组的燃料费函数既不平衡也不凸起时可行,并且存在一个或多个下面约束:负荷需求与发电机输出的总和必须相等,对于每个发电机组存在上限和下限,对加速和减速速率存在某些限制,以及存在禁忌操作域。
例如,如果将24小时负荷需求(图1中所说明的例子)被分成等时间间隔Δt(每个时间间隔等于15分钟)的T(例如T=96)块,并且存在N个发电机组,然后给定第i个(i=1,2,…,N)发电机组以及它的最大和最小输出,第i个发电机组的加速和减速速率分别是Pi min、Pi max、DRi、URi。该机组将具有Zi不重叠禁忌操作域(POZ)(zil=(Pmin_il,Pmax_il)(l=1,2,…,Zi,Pmin_il,Pmax_il代表第l个POZ的最小和最大输出));Pi t(t=1,2,…,T)代表它的在时间间隔t的输出,并且Pi 0是它的初始输出;并且Ci(Pi t)代表当它的输出功率是Pi t时的燃料消耗率。如果Dt代表在时间间隔t时的负荷需求,则CT表示所有T时间间隔期间N发电机组的燃料费。于是动态负荷经济分配问题可以公式化为:
最小化
服从:
a)负荷相等约束:
b)功率输出的上限和下限:
c)加速/减速:
d)禁忌操作域:
因为由于加速和减速速率的限制发电机组在一个时间间隔(Δt)内不能完全通过POZ的可能性很大,所以只要工作在POZ中的任何机组的时间间隔的总数是最小的,允许所分配的负荷是在POZ中。因而,约束(d)可被改变为:
(e)弱形式的禁忌操作域:
最小化
在该约束中,TPOZ是对于工作在POZ中的任何发电机的时间间隔的总数,并且‖·‖计算给定集合的基数(cardinality)(成员数)。
解决DELD问题中的二次规划(QP)的限制使遗传算法(GA)更具选择性。对于该优点的一个原因是GA可以使用任何形式的燃料费函数(图1中说明了其中一个例子),可以考虑各种约束,不需要最优化的起始点,具有脱离局部最小值的更高机会,可以以并行模式运行,并且可能具有更短运行时间。然而,如先前所提到的,原始GA在没有QP帮助的情况下不能解决DELD问题,并且QP具有它自身的限制。发明者已发现失败的根本原因是遗传操作,诸如初始化、交叉、以及突变等是固有地不能处理动态约束。它们以逐个间隔的方式影响给定的个体或解决方案,而在被考虑的时间间隔之前或之后不处理时间间隔。因此,在必须包含在某些动态关系中的所有时间间隔发生的所有改变中不存在调整。通过该发现的试探,发明者通过对原始GA做出关键改变而设计了约束遗传算法(CGA)。
例如,如果CGA具有大小为L的群体,“生活”在群体中的每个个体代表负荷分配的特定解决方案。在图2中说明了负荷分配的解决方案的图例。图4说明了第k(k=1,2,…,L)个个体的结构,并且在图4中,dki t代表在时间间隔t分配给第i个发电机组的负荷。
以下列方式估计第k个个体的适合度:
这里fcost(k)表示解决方案的全部燃料费,fmin=min(fcost(j)),并且fmax=max(fcost(j)), 表达式Δ>0保证(0,1)内的每个个体的适合度,从而每个个体在进化中具有非零的选择机会。于是如下计算全部燃料费:
其中α>0是当解决方案破坏约束a(负荷相等)时的处罚因子,并且p(·)是用于破坏约束e(弱形式中的POZ)的处罚函数。因子p(·)随着负荷分配接近POZ中心而增加处罚值。应该由用户根据每个特定条件的需要确定p(·)中的α和β值。值得注意的是:不同于基于遗传算法的传统方法,在适合度函数中包含处罚因子不是CGA使所有解决方案在可行域内或附近所使用的唯一方法。
在图5中说明了CGA 500的示例实施方案。在图5中,在510,通过偏移和试探式初始化群体。在520,交叉操作被施用于根据遗传算法“轮盘赌”策略从群体中所选择的Pc×N(Pc是交叉概率)对个体或“父”。在530,复制使个体具有最高适合度,并且根据“轮盘赌”策略从群体中选择剩余的N-1个个体,并且将其放到下一代中。在540,突变操作被施用根据“轮盘赌”策略从群体中选择的Pm×N(Pm是突变概率)个个体。在550,如果重复数大于最大代数G(由用户预定),则停止进化,并且过程500将最佳个体导出为在560的最终解决方案。如果没有达到代的最大数,则过程转到块520。尽管过程500类似于标准GA的过程,但是在CGA中设计了新的初始化、交叉、以及突变操作,以使最优化问题可以解决。
图6说明了适用于在发电机组之间经过有限数量的时间间隔分配负荷需求的CGA 600的另一示例实施方案。在605,在遗传算法上提供约束和动态规划能力。如在610、612、和614中所指出的,对初始化、交叉、以及突变操作做出改变。在620,对初始化操作的改变可以包括提供偏移和试探式的初始化。如在621-625中所描述的,一个分配解决方案的偏移与试探式初始化可以包括在621向在禁忌操作域中操作的发电机组分配最高优先权;在622向随机选择的发电机组分配普通优先权;在623向剩余发电机组分配最低优先权;在624根据优先权列表重复地选择发电机组;以及在625向那个发电机组分配未完成的负荷需求,而不破坏一个或多个约束。
在630,对交叉操作的改变可以包括:为交叉选择可行位置,以适应动态约束。对突变操作的改变包括在631试探式地维持可能突变点的位置;在632提供正突变操作,以在634降低燃料费;以及在633提供负突变操作,以在635释放以前和/或较晚的时间间隔,从而能够在突变点出现需求与分配的相等。在632的正突变仅仅能够影响在634的单个时间间隔,并且在636包括离散的搜索策略,以搜索更好的分配解决方案。对于在633的负突变操作,它的在635的释放操作包括在637保守的释放操作和在638积极的释放操作。保守的释放操作仅仅在639影响一次,并且包括在641的离散搜索策略,以搜索更好的分配解决方案。积极的释放操作可以在640影响多个时间间隔并且可以在一个或多个时间间隔破坏负荷相等。在650-653,施加在遗传算法上的约束可以包括一个或多个等于发电机输出总和的负荷需求、发电机组的上下限、加速和减速速率限制、以及建立一个或多个禁忌域。在660,优秀(即,最佳)解决方案和其它通过轮盘赌策略选择的解决方案被复制到下一代的群体。最后,在665,在达到最大代数的基础上获得解决方案。
重新参考图5,在初始化步骤510中,几乎所有用于ELD的基于GA方法将通过随机地在所有发电机组之间分配负荷需求而初始化新个体。然而,这种方式生成的新个体可能导致对于进化不利的起始点,这是因为它们中的多数可能严重地破坏这里所施加的约束。为了减轻该问题,CGA以偏移和试探式的方式初始化个体。也就是说,对于每个时间间隔,将根据优先权列表重复地选择一个发电机,并且向它分配未完成的负荷需求。这里所使用的优先权列表向工作在POZ中的机组分配最高优先权,向初始化之前随机选择的优选机组分配普通优先权,并且向剩余机组分配最低优先权。为了不破坏约束b和c,所选择的发电机可以自身决定接受负荷的可行和随机部分,而不是完全地被动接收器。既然由于动态约束,不总是满足负荷相等约束,所以在重复一定数量的次数之后停止重复。所有初始化的个体肯定会完成约束b和c两者。
详细的初始化过程的例子如下:
1.设置时间间隔t=0,并且随机地生成E、优选机组的子集
2.使t=t+1; (当t=1时, );ΔDt=Dt-Dt-1(当t=1时, )。设置重复次数j=0。如果ΔDt≠0,则设置变量NeedDisturbance=FALSE;否则ΔDt=δ(δ>0是很小的随机值)并且NeedDisturbance=true。
3.使j=j+1,并且如果在该时间间隔期间存在工作在POZ中未被选择为负荷分配的机组,则随机地从它们中选择一个机组。否则,如果j是很小值,则从E选择一个机组,或者如果j足够大,则从所有N机组选择一个。为了实现该例子的目的,假设所选择的机组是第i个。
4.选择 (λ>1是随机值),并且如果dki t+Δd破坏b和c约束之一或全部,则将Δd截取到满足约束b和c两者。
5.设置 ΔDt=ΔDt-Δd;如果j≤J(J是重复次数的上限)并且|ΔDt|>0,并且转到步骤3。
6.如果NeedDisturbance=FALSE并且t≤T,转到步骤2;如果
NeedDisturbance=TRUE,则设置j=0,ΔDt=-δ,并且
NeedDisturbance=FALSE,并且转到步骤3。否则,终止初始化。
当负荷需求从先前时间间隔(ΔDt=0)起保持相同时,使用干扰项δ(首先设置ΔDt=δ.>0并且随后设置ΔDt=-δ),以使步骤3至5有效。这使得破坏约束e可被避免。
在传统的GA中,两个个体之间的交叉可能发生在一个(单点交叉)或几个(多点交叉)随机选择的位置。然而,为了实现动态约束,本发明公开的实施方案允许CGA的交叉只发生在可行位置(见图7)。为了简化下面的描述,用于在第j时间间隔的第k个个体的负荷分配被表示为
定义1:给定个体对
分别地 以及 如果 并且 可实现约束c,则时间间隔j是可行位置。
CGA的交叉操作被如下定义(假定交叉的两个参与者分别是f和m):
1.搜索所有可行位置;假定总共存在F可行位置;如果F=0,则退出;
2.随机地选择n≤F交叉点,并且将T时间间隔划分到至多n+1段。通过从f和m交替地复制这些段而生成第一子个体,并且通过从m和f交替地复制这些段而生成第二子个体;
3.将两个新个体保存回群体(在交叉后将扩大群体,并且在复制后恢复它的原始大小)。
作为例子,假定在步骤2中存在2个选择的可行位置,其是{t1,t2},并且1<t1<t2<T。这两个可行位置将T时间间隔分成3段[1,t1],[t1+1,t2],[t2+1,T]。那么第一子个体将是 并且第二子个体是
在下文中,将示出通过CGA的交叉操作所生成的新个体不破坏动态约束c。由于在交叉后将生成两个子个体,所以在不损失一般性的情况下可以只考虑它们中的一个。首先证明在连接点将不发生破坏。假定在步骤2中所选择的两个连续段是[t
i-1+1,t
i]和[t
i+1,t
i+1](t
i-1,t
i,t
i+1是所选择的可行位置),并且t
i是这种情况下的连接点。然后
是与新个体上的上述段相应的部分。两个段的串联可能导致在接近连接点
和
的两个时间间隔破坏约束c。由于t
i是可行位置,根据定义1,S中
和
都不会破坏约束c。由于父个体总是在所有时间间隔实现约束c,所以在不受串联影响的时间间隔总是都能满足两个约束。结果,新生成的个体将不破坏约束c。
在传统的GA中,突变操作将从给定个体随机地选择一个或几个突变点并以某种方式干扰这些点上的值。然而,这些干扰可能很容易导致一个或多个约束的新的破坏。为了避免这一点,CGA设计了两类突变操作。“正”突变操作和“负”突变操作。当应用于单一突变点,前者尽力降低那个时间间隔的燃料费,并且如果在那个时间间隔约束a被破坏,则同时减轻负荷差异,而后者只针对在那个间隔满足负荷相等,通过释放以前和/或较晚间隔以便为那个间隔保存更多可调整空间。
由于新突变操作比传统操作消耗更多时间,而不是同传统GA中一样随机选择,所以CGA选择能够满足下面标准的任何一个的时间间隔作为突变点:
1)它在以前生成期间直接地被改变,但还没有突变;
2)它通过正操作已突变,并且在那个间隔的燃料费降低了;
3)它通过负操作已突变,但还没有满足约束a;
4)它直接接近所改变的间隔,但还没有突变。
如果不满足下面标准的任何一个,则将取消突变点:
1)它通过正操作已突变,但是不能降低燃料费,并且已满足约束a;
2)它通过负操作已突变,并且满足约束a。
在个体初始化期间,将把所有时间间隔设置为突变点,即使在进化期间将取消它们中的某些。然而,交叉点、在突变中包括的和影响的间隔、以及直接接近它们的间隔可以变成新突变点。突变点的更新真正地将优化的成果带到了需要进一步优化以及还可以被进一步优化的时间间隔。
正突变的主要目的是降低突变点的燃料费,并且同时,如果在那个间隔破坏了约束a,则减轻负荷差异。例如,假定考虑的第k个个体和突变点是在第j个间隔,用于该间隔的原始负荷分配解决方案是 给定点的正突变在下面过程中发生:
1)设置Q={1,2,…,N};
2)如果Q=Φ,则终止该搜索过程;否则,随机地从Q选择一个元q,并且使Q=Q\{q};
3)根据约束b和c,为q决定可行域
如果域的大小足够大,则生成一组m(m是(1,M]中的随机数,并且M是预定的最大搜索步骤)可行点F={s
1,s
2,…s
m},从而l
q=s
1<s
2<…<s
m=u
q并且
(p=2,3,…m);设置搜索步骤i=0,
4)i=i+1;如果i>m,则返回到步骤2;否则,临时设置 并且 ( 并且r≠i);
5)如果
则从Q选择机组,以形成可调机组组
如果A≠Φ,则临时设置
6)如果临时解决方案 破坏约束b和c的任何一个,则放弃所有改变转到步骤4;
7)计算 如果f′>fmin,并且直接转到步骤4;否则更新 并且设置fmin=f′,然后转到步骤4。
从3至6的步骤组成离散搜索的过程,其中如果对一个机组的增加可能破坏负荷相等约束,则将均匀地分解破坏部分,并且从其它可调机组减掉。以尝试方式构造可调机组组A,因为只有当Q中所有机组能够获得增加而不破坏约束b和c,
才可以是真增加。如果Q中的某些机组不能获得增加,则剩余机组将获得增加
其绝对值大于
这是步骤6中再检查(L
k j)′有效性的原因。值得注意的是,如果存在破坏约束a,则步骤5和6可能部分地或完全地降低负荷差异。
对于负突变,由于动态约束,如果负荷分配的调整被限于恰好单个时间间隔(不包括以前和/或较晚间隔),即使理论上可能,在某些情况下也不可能满足负荷相等的约束。作为例子,假定负荷需求在时间间隔j急剧增加。那么,只有所有机组可以同时在j增加电力输出才可能满足该命令。然而,如果某些发电机在j之前已工作在它们的最大功率输出,则这些发电机可能在该关键时刻不贡献任何输出。这种情况下,如果负荷分配的调整被限于时间间隔j,则负荷差异将总是存在。唯一的解决方案是在以前和/或较晚的时间间隔改变负荷分配,以便所有机组在j能够保留足够的能力处理该具挑战性的情况。
然而,由于调整可能包括多于一个发电机以及多于一个时间间隔,需要动态规划(DP)解决该问题。为了不包括在处理各种约束中耗时并且不灵活的某些DP算法,CGA再次使用离散搜索方法,其也使用在正突变中,以部分地模拟DP的工作。尽管不能保证在一次运行期间满足负荷相等,但是通过群体的进化证明该简单策略是有效的。
例如,假定它是第k个个体,并且考虑的突变点是第j个间隔,用于该间隔的原始负荷分配解决方案是 时间间隔 被认为是第一半并且时间间隔 被认为是第二半。给定点的负突变在下面过程发生(见图8):
1)如果Lk j不破坏约束a,则退出;
2)计算 随机地选择第一(或第二)半;释放第一半中的时间间隔(whichHalf=firstHalf)或第二半中的时间间隔(whichHalf=secondHalf));
3)如果Lk j不破坏约束a,则退出;否则,则重新计算ΔDj并且释放剩余一半中的时间间隔
占用两个步骤释放第一(或第二)半中的时间间隔。
I.如果whichHalf=firstHalf,则选择最靠近j的时间间隔p∈[0,j-1],并且RelaxConservatively(p,ΔDj,whichHalf)=TRUE;如果whichHalf=secondHalf,则选择最靠近j的时间间隔p∈[j+1,T],并且RelaxConservatively(p,ΔDj,whichHalf)=TRUE;如果不存在p,直接退出;
II.如果whichHalf=firstHalf,则在i=p+1,p+2,…,j-1运行Relax(i,ΔDj,whichHalf)直到返回FALSE;如果Relax(j-1,ΔDj,whichHalf)=TRUE,则在j应用正突变;如果whichHalf=secondHalf,则在i=p-1,p-2,…,j+1运行Relax(i,ΔDj,whichHalf)直到返回FALSE;如果Relax(j+1,ΔDj,whichHalf)=TRUE,则在j应用正突变;
如果在某个时间间隔的释放是有效的,则在RelaxConservatively()中使用下面函数计算:
GetIntervalPotential(Lk j,loadDiff,whichHalf)
开始
将(dki j)*表示为用于第i个机组在时间间隔j不破坏约束b和c的任何可能值
返回μ
结束
函数RelaxConservatively(j,loadDiff,whichHalf)包括下面步骤(从c至f的步骤组成离散搜索过程,其在该实施方案中与正突变中所使用的相同):
a)设置Q={1,2,…,N},beRelaxed=FALSE;
b)如果Q=Φ,则返回beRelaxed并且终止该搜索过程;否则,随机地从Q选择一个元q,并且使Q=Q\{q};
c)根据约束b和c,为q决定可行域
如果域的大小足够大,则生成一组m(m是(1,M)中的随机数,并且M是最大搜索步骤)可行点F={s
1,s
2,…s
m},从而l
q=s
1<s
2<…<s
m=u
q并且
(p=2,3,…m);设置搜索步骤i=0;设置
d)i=i+1;如果i>m,则返回到步骤b;否则,临时地设置 并且 ( 并且r≠i);
e)如果 则从Q选择机组,以形成可调机组组如果A≠Φ,则临时地设置
f)如果临时解决方案 破坏约束b和c的任何一个,则放弃所有改变转到步骤d;
g)如果 则更新 以及dmin,设置beRelaxed=TRUE;最后,转到步骤d。
RelaxConservatively()函数本身仍然限制只在一个时间间隔调整负荷分配,并且当然,它在处理释放包括其它时间间隔的情况时具有严重的缺点。这可以从下面例子中看出;如果释放第一半中的间隔,并且 (在间隔j需要分配更多负荷),并且现在考虑的是p+1<第j个间隔;机组i是仅有的可调整发电机,并且 (这里我们假定URi=DRi)。在间隔p的RelaxConservatively()已为间隔p+1保存了可调整空间,从而可以将dki p+1增大为dki p+1+Δd,以向增加的dkip+2创建附加空间,而不超过机组i的最大输出;由于这时dki p+3对于RelaxConservatively()是不可调整的,它为dki p+2设置上界dki p+3+DRi·Δt,所以单独调整dki p+1将不为dki p+2以及间隔p+2保存增加空间,间隔p+2在可能影响第j个间隔之前使RelaxConservatively()失败。
在上述例子中,即使dki p+1也是要增加的正确机组,以便为下一时间间隔保存更多可调空间。RelaxConservatively()仍然返回FALSE,仅仅是因为不能同时增加dki p+3。为了减轻该问题,函数RelaxAgressivley()打破其它间隔的负荷相等(破坏约束a),用以完成给定间隔的负荷相等。
RelaxAgressively(l,loadDiff,whichHalf)//l是时间间隔
开始
//构造约束机组组C
当C≠Φ
开始
随机选择c∈C,设置C=C\{c};
//确定在相应时间间隔增加机组c
//在相应的时间间隔向机组c增加Δd,并且改变所影响的间隔,
//从而对于机组c在所有时间间隔都可以满足约束b和c。
如果whichHalf=firstHalf,则
startItv=l+2,targetItv=l+1
否则
startItv=l-2,targetItv=l-1
当(Δd≠0并且tryTimes<a预定值)
开始
如果Augment(c,startItv,whichHalf,Δd)=TRUE,则
开始
将所改变的间隔更新为突变点
返回TRUE;
结束
tryTimes=tryTimes+1;
Δd=Δd/2;
结束
结束
返回FALSE;
结束
使用迭代函数Augment,用于确保在RelaxAgressively()中影响的所有时间间隔仍然满足约束b和c。由于当尝试改变是固定值的某个机组的初始负荷而实现动态约束时Augment()可能失败,所以在这种情况下RelaxAgressively()将降低增加的绝对值,并且重试Augment(),直到成功或重试次数达到某个预定数。
Augment(c,itv,whichHalf,Δd)//c是机组号。
开始
如果itv<1,则
返回FALSE;//尝试改变机组c的初始负荷Pc 0,
这是不允许的
如果itv≥T,则
将间隔itv更新为突变点并且返回TRUE;
bSucceeded=FALSE
如果whichHalf=firstHalf,则
开始
如果
则
将间隔itv更新为突变点并且返回TRUE;
否则
bSucceeded=Augment(c,itv+1,whichHalf,Δd)
否则//如果whichHalf=secondHalf
如果 则
将间隔itv更新为突变点并且返回TRUE;
否则
bSucceeded=Augment(c,itv-1,whichHalf,Δd)
结束
如果bSucceeded=TRUE
将间隔itv更新为突变点;
否则
//不能更新所有被影响的间隔,还原初始值
返回bSucceeded;
结束
在负突变使用的Relax()是RelaxConservatively()和RelaxAgressively()的组合:
Relax(itv,loadDiff,whichHalf)
开始
如果RelaxConservatively(itv,loadDiff,whichHalf)=TRUE,则
返回TRUE
否则如果RelaxAgressively(itv,loadDiff,whichHalf)=TRUE,则
返回TRUE
否则
返回FALSE
结束
对于为突变所选择的个体上的每个突变点,首先向它应用正操作。如果降低了间隔费用fitv_cost(·),则不对那个突变点做任何其他事情。否则,只有在这点没有实现负荷相等时,该过程继续向它应用负操作。
在CGA中使用了七个参数控制它的工作。这些参数是群体尺寸L、最大代数G、交叉概率Pc、突变概率Pm、离散搜索中的最大步骤数M、用于破坏约束a的处罚因子α、用于破坏约束e的最大处罚因子β。实验证明CGA优选G的小值(<100)以及Pm的大值(>0.1)。L的大值可以帮助CGA更快地找到最优值。最大步骤数M可以在10~50左右,并且可以将α设置为大值(例如1000),从而满足约束a将具有很高优先权。最大处罚因子β可以从大约2~10选择值。为了给实际应用中的该方法选择最合适的和持久的设置,用户可以预先重复运行具有不同参数设置的CGA几次,以分配具挑战性的负荷需求,并且根据最后解决方案的质量和所需要的运行时间将最合适的设置选择为持久设置。
图9是与可以实现本发明的实施方案相结合的硬件和操作环境的概略图。图9的描述是用来提供与可以实现本发明相结合的适当的计算机硬件和适当的计算环境的简洁、概括描述。在某些实施方案中,以可以由诸如个人计算机之类的计算机执行、诸如程序模块之类的计算机可执行指令的一般上下文描述本发明。通常,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、部件、数据结构等。
此外,本领域的普通技术人员将意识到本发明可以和其它计算机系统配置一起实现,包括手持设备、多处理器系统、基于微处理器、或可编程消费电子、网络PC、微型计算机、巨型计算机等。本发明也可以实现在分布式计算环境中,其中由通过通信网络连接的I/O远程处理设备执行任务。在分布式计算环境中,程序模块可以位于本地和远程存储器存储设备两者中。
在图9中所示的实施方案中,提供了可应用于其它图中所示的任何服务器和/或远程客户端的硬件与操作环境。
如图9中所示,硬件和操作环境的一个实施方案包括以计算机20(例如,个人计算机、工作站或服务器)的形式的通用计算设备,所述的通用计算设备包括:一个或多个处理单元21;系统存储器22;以及系统总线23,该系统总线23可操作地将包括系统存储器22的各种系统部件连接到处理单元21。可以只有一个或者可以有多于一个处理单元21,从而计算机20的处理器包括单个中央处理器单元(CPU),或通常称为多处理器或并行处理器环境的多处理单元。在各个实施方案中,计算机20是传统计算机、分布式计算机、或任何其它类型计算机。
系统总线23可以是几类总线结构的任何一种,该总线结构包括存储总线或存储控制器、外围总线、以及使用各种总线结构的任何一种的局部总线。系统存储器也可以简单地称为存储器,并且,在某些实施方案中,包括只读存储器(ROM)24和随机访问存储器(RAM)25。基本输入/输出系统(BIOS)程序26,包含帮助在计算机20内的元件之间传送信息的基本例程,诸如在启动期间,可被保存在ROM24中。。计算机20进一步包括:硬盘驱动27,用于从和向硬盘(未示出)读和写;磁盘驱动28,用于从或向移动磁盘29读或写;以及光盘驱动30,用于从或向诸如CD ROM或其它光介质之类的移动光盘31读或写。
硬盘驱动27、磁盘驱动28、和光盘驱动30分别地与硬盘驱动接口32、磁盘驱动接口33、以及光盘驱动接口34连接。驱动和它们相关的计算机可读介质为计算机20提供了计算机可读指令、数据结构、程序模块和其它数据的非易失性存储。本领域普通技术人员将意识到的是:诸如磁带、闪存卡、数字视频盘、伯努利(Bernoulli)筒、随机访问存储器(RAM)、只读存储器(ROM)、独立盘的冗余阵列(例如,RAID存储设备)等能够可以存储由计算机访问的数据的任何类型计算机可读介质可以被用于示例性操作环境中。
可以在硬盘、磁盘29、光盘31、ROM 24、或RAM 25上存储包括操作系统35、一个或多个应用程序36、其它程序模块37、以及程序数据38的多个程序模块。用于本发明的包含安全传输引擎的插件可以位于这些计算机可读介质的任何一个或一些上。
用户可以通过诸如键盘40和定位设备42之类的输入设备将命令和信息输入到计算机20中。其它输入设备(未示出)可以包括麦克风、游戏杆、游戏手柄、卫星电视天线、扫描仪等。这些其它输入设备通常通过连接到系统总线23的串行端口接口46被连接到处理单元21,但是也可以通过诸如并行端口、游戏端口、或通用串行总线(USB)之类的其它接口被连接。监视器47或其它类型的显示设备也可以通过诸如视频适配器48之类的接口被连接到系统总线23。监视器40可以为用户显示图形用户界面。除了监视器40,计算机典型地包括诸如扬声器和打印机之类的其它外围输出设备(未示出)。
计算机20可利用逻辑连接到一个或多个远程计算机或服务器,诸如远程计算机49,在网络环境中操作。通过连接到计算机20的通信设备或者计算机20的一部分实现这些逻辑连接;本发明不限于特定类型的通信设备。远程计算机49可以是另一计算机、服务器、路由器、网络PC、客户端、对等设备或其它公共网络节点,并且典型地包括与计算机20相关的上述I/O的许多或所有元件,尽管只示出了存储器存储设备50。图9中所描述的逻辑连接包括局域网(LAN)51和/或广域网(WAN)52。这样的网络环境在办公网络、企业范围计算机网络、内部互联网和因特网所有类型网络中是常见的。
当使用在LAN网络环境中,计算机20通过网络接口或适配器53连接到LAN 51,所述的网络接口或适配器是一类通信设备。在某些实施方案中,当使用在WAN网络环境中,计算机20典型地包括调制解调器54(另一类通信设备)或任何其它类型通信设备例如用于在诸如因特网之类的广域网上建立通信的无线收发器。通过串行端口接口46将可以是内部或外部的调制解调器54连接到系统总线23。在网络环境中,与计算机20相关的所描述程序模块可以存储在远程计算机或服务器49的远程存储器存储设备50中。可以意识到,所示的网络连接是示例性的,并且在计算机之间建立通信链路的其他手段和通信设备可被使用,包括混合光纤同轴连接、T1-T3线、DSL、OC-3和/或OC-12、TCP/IP、微波、无线应用协议、以及通过任何适当的开关、路由器、输出线和电源线的任何其它电子介质,正如本领域的普通技术人员已知和理解的。
在前面的实施方案详细描述中,为了简化本公开,各种特征一起被结合在一个或多个实施方案中。本公开的方法不应当被解释为反映下述意图,该意图为本发明所要求保护的实施方案特征不要求比在每个权利要求中明确记载的特征更多的特征。相反,如在下面权利要求所反映的,发明的主题在于小于单个公开实施方案的所有特征。因而下面权利要求据此被纳入到本发明的实施方案的详细描述中,其中每个权利要求以其自身作为一个独立的实施方案。应该理解上面的描述是用来说明,而不是限制。是用来覆盖可以包括在附属权利要求中所定义的发明范围内的所有替代、改变和等价物。在回顾上面描述的基础上,许多其它实施方案对于本领域技术人员是显而易见的。因而,应参考附属权利要求连同这些权利要求所授权的等价物的全部范围确定本发明的范围。附属权利要求中,分别使用术语“包括”和“其中”作为各个术语“包括”和“其中”的普通英语等价词。此外,使用术语“首先”、“其次”、和“第三”等仅仅作为标签,而不用来对它们的对象施加数字要求。
为了遵循37C.F.R.1.72(b),提供了摘要,以允许读者快速确定该技术公开的本质和要点。提交摘要应理解为不是为了解释或限制权利要求的范围或含意。