算法直到
‘壹’ 算法步骤
上述算法的流程如图4-1所示。
算法从寻找初始可行解开始。通常的做法是,它对应于从松弛变量列形成的基底。如果没有初始可行解存在,则算法在第二步停止。
图4-1 菲力浦的多目标单纯形法计算框图
如果存在一个可行基底。便置计数器b和c分别为1和0。计数器b标识各个基底,计数器c标识对应于非劣势解的基底,在第三步中计算与初始基底对应的解。在第四步中,通过解非劣势性子问题来检查可行解的非劣势性。
算法在第四、五、六步中进行循环,直到发现一个非劣势解。发现后,把这个非劣势解在第七步中打印出来。
为了检查另外的非劣势解,在第八步中求解方向子问题。如果没有合适的(sk)min=0,那么,不存在别的非劣势解,算法停止。但是,如果第九步确定了一个(sk)min=0,且第十步指出对应的xk将引导到一个未探索过的基底,则对应的xk进入基底,转到第七步去打印出这个另外的非劣势解。算法将继续在第七、八、九、十、十一、七步之间进行循环,直到出现没有对应的xk导致未探索基底时为止。
为了进一步理解菲力浦的多目标单纯形法求解的有关步骤,我们考虑上一节中的例子并添加松弛变量来产生初始多目标单纯形表。
极大优势
华北煤田排水供水环保结合优化管理
其中,
华北煤田排水供水环保结合优化管理
满足于约束条件
华北煤田排水供水环保结合优化管理
初始基本可行解在表4-2中列出,初始基底是根据与松弛变量x3、x4、x5相关的列来形成的。从而,算法的第一、二、三步是满足的。
表4-2 初始基本可行解表
接下来,算法确定x1=x2=0是否为非劣势解点。这由解非劣势性子问题来进行。要解这个非劣势性子问题,需要确定(uT+eT)D。矩阵D对应于目标函数行中的非基本列,就是
华北煤田排水供水环保结合优化管理
对于x1=x2=0要是非劣势的,必须存在一个权数集wi=ui+1,使得
华北煤田排水供水环保结合优化管理
或
华北煤田排水供水环保结合优化管理
或
华北煤田排水供水环保结合优化管理
减去剩余变量s1,s2,添加人工变量y1,y2,产生所需要的第一演算阶段单纯形问题:
华北煤田排水供水环保结合优化管理
满足于约束条件
华北煤田排水供水环保结合优化管理
对此非劣势性子问题的初始表如表4-3所示。
表4-3 非劣势性子问题的初始表
把第三行加到第一行上,产生初始可行解,如表4-4所示。
表4-4 初始可行解
根据单纯形法则,u2进入基底,旋转主元是第三行框起来的数2。变换后得表4-5。
表4-5 非劣势解表
此时ymin=0,s1=7/2,u2=1/2,u1=s2=y1=y2=0,于是点x1=x2=0是非劣势解。
我们也注意到,表4-5表明存在正的权数w1=u1+1=1,w2=u2+1=3/2,解x1=x2=0也是下面问题的最优解。这个问题是:
华北煤田排水供水环保结合优化管理
满足于
华北煤田排水供水环保结合优化管理
因此,可以这样说,菲力浦算法允许我们“朝后”应用加权方法:对于一个非劣势解x,确定出一组权数w,它们是在加权方法中用来得出这个非劣势解x所需要的权数。
接下来求解方向子问题,以确定是否存在另外的非劣势解。从表4-5,我们能够看到,有s2=0。于是,如果引入x2将导致一个未探索过的基底,则存在另一个非劣势解点。从表4-2,对x2的旋转主元是第五行中的数字5,这表明新的基底将是x2、x3和x4,它还没有被探索过。
显然没有必要,因为已经确定了将导致另一个非劣势解的xk,但我们现在也能够确定引入x1是否会导致一个非劣势解。这可以通过解下面的方向子问题来进行。这个方向子问题是:
华北煤田排水供水环保结合优化管理
满足于
华北煤田排水供水环保结合优化管理
在第一演算阶段以后(表4-5),得到如下的方向子问题,表4-6所示。
表4-6 方向子问题表
把第2行加到第一行上,产生了表4-7。
表4-7 最优解表
表4-7是最优的,它指出s1=7/2>0,因此引入x1将导致一个有劣势解。
我们现在引入x2。以表4-2第五行的元素为主元进行旋转,得到主问题的第二个表,如表4-8所示,从而,x1=0,x2=72/5是一个非劣势解,把它打印出来。
表4-8 主问题二表
为了检查是否存在别的非劣势解,现在必须重新求解方向子问题。要这样做,必须又一次计算(uT+eT)D,其中的矩阵D此时为
华北煤田排水供水环保结合优化管理
于是,
华北煤田排水供水环保结合优化管理
由此,方向子问题的合适的约束集为
华北煤田排水供水环保结合优化管理
关于目标函数,可以为s1和s5。然而,在前面我们是用x2驱赶x5而得到目前的非劣势解点,因此,易知有s5=0,且把x5带入基底会产生出前面的非劣势解点。从而,仅需对s1检查方向子问题,就是,
华北煤田排水供水环保结合优化管理
满足于
华北煤田排水供水环保结合优化管理
用表的形式,见表4-9。
表4-9 方向子问题表
把表4-9的第2行加到第1行上,得表4-10。对表4-10以第2行第二列元素为主元进行旋转,得到最优的表4-11。从表4-11可以看出,s1=0,这表示此时把x1引入基底将产生另一个非劣势解点。从表4-3可明显看出,旋转主元是4/25,将把x4驱赶出基底。这导致又一个未探索过的基底(x1,x2和x3)和第三个非劣势解点。以4/25为主元旋转,得到下面表4-12中的解:非劣势点x1=7,x2=13。
表4-10 方向子问题过渡表
表4-11 最优解表
表4-12 非劣势解表
继续与前面同样的过程,即求解与表4-12相关的方向子问题,得到s4=0和s5=9/2。引入s4将把x1从基底中驱赶出去并返回到先前的非劣势解。引入x5将把x2从基底中驱赶出去将得到一个有劣势解。这样,算法停止[134]。
‘贰’ 有N个人围成一环形圈,第一个人从1开始报数,报道M的人出列,直到最后一个同学,请写出算法。
经典的约瑟夫环问题
设n个人围成一圈,标号为0..n-1,从第一个人开始依次从1到k循环报数,当报到k的
时候此人出圈。设J(n,
k,
i)表示第i个出圈的人的标号。
定理一:
J(n,
k,
1)
=
(k-1)
MOD
n,
(n>=1,
k>=1)
…………
(1)
证明:由定义直接得证。
定理二:
J(n+1,
k,
i+1)
=
(k
+
J(n,
k,
i))
MOD
(n+1),
(n>=1,
k>=1,
1<=i<=n)
………
…
(2)
证明:
设g
=
J(n,
k,
i),因此如果有n个人,从0开始报号,第隐世i个出圈的标号为g。现在考
虑J(n+1,
k,
i+1),灶清肢因为J(n+1,
k,
1)
=
(k-1)
MOD
(n+1),即第一步的时候删除数
字(k-1)
MOD
(n+1),第二步的时候从数字k开始数起。因而问题变为了找到剩下的n
个数字中从k开始数起被删除的第i个数字(注意这时(k-1)
MOD
(n+1)已经被删除了)
,而这恰好就正咐是(g+k)
MOD
(n+1),(2)成立。
根据(2),很容易求得n个数里面第i个出圈的数。
就根据这个定理递推计算吧!
‘叁’ 设计一个计算10个数的平均数的算法 (用直到型和当型)
算法可以这样描述:
S1:S=0;
S2:I=1;
S3:输入一个数G;
S4:使S+G,其和仍放S中;
S5:使I的值增加1;
S6:如果I>10,退出循环,如果I≤10重复S3;
S7:将平均数S/10存放在A中;
S8:输出A.
按着算法就可以画程序框图了
‘肆’ 利用两种循环写出1+2+3+…+100的算法,并画出各自的流程图
直到型循环算法:
第一步:S←0;
第二步:I←1;
第三步:S←S+I;
第四步:I←I+1;
第五步:如果I不大于100,转第三步;否则,输出S。相应的流程图如图甲所示.当型循环算法如
下:S1令i←1,S←0S2 。
当型循环算法如下:
S1 令i←1,S←0
S2 若i≤100成立,则执行S3;否则,输出S,结束算法
S3 S←S+i
S4 i←i+1,返回S2
相应的流程图如图乙所示。
(4)算法直到扩展阅读
从1开始递增依次与从100开始递减、将两个数进行相加配对、有50组为101的数。
1+100=101,2+99=101······50+51=101。从1加到100有50组这样的数,所以50X101=5050。
等差数列求和公式:(1+100)*100/2=5050