操作系统clock算法

2025-01-27

操作系统clock算法(精选6篇)

1.操作系统clock算法 篇一

There is a clock on my desk. I like it very much, because it is very useful to me. It has a blue cap, and a gray body. Every morning it wakes me up to go to school. So I never late for school.

What is it like? It has some figures, the short one points to the hours, the long one points to the minutes. .

I like my clock very much!

2.操作系统clock算法 篇二

随着计算机技术的发展及计算机的日益普及,无纸化考试系统的自动组卷、自动评阅、计分、成绩存档与考试统计分析等功能将有效地避免资源的浪费,如何合理地利用试题库中的试题组成一份科学的试卷,是网上考试系统设计中的重要环节,也是一大难题,本文介绍了一种改良后的遗传算法来解决这一问题。

1 组卷算法分析

组卷算法是针对考试系统中的组卷问题所提出的一种解决问题的算法,该算法会根据考试系统对组卷问题所提出的要求,采用遗传算法思想,合理和快速地生成相应的试卷,因此,研究组卷算法的关键在于研究相关的试题参数和组卷目标,再结合遗传算法来解决问题。

1.1 试题参数说明

在组卷问题中,每一道试题都有若干个属性来描述其基本特征,被选择的试题的特征值将直接参与试题适应度的计算。下面分别介绍几个重要的参数[1,2,3]。

(1)难度:即答题的难易程度,难度越大,得分越少;难度越小,得分越多,定义为公式(1)。

式(1)中,Dqp为难度系数;Sqa为该试题所得的平均分;Sqf为该试题分值。

试卷的难度可以利用试题的难度求得,试卷难度计算公式如下:

式(2)中,Ded是试卷难度;Dqdi是第i道试题的难度系数;Sqfi是第i道试题的分值;Sef是试卷的总分;n表示该试卷有n道试题。

(2)鉴别度:是最大限度区分被试者的特性和能力的指标,区分度好的试卷,不仅对学生的特性、能力和学业水平有较高的鉴别能力,而且可以说明试题难易搭配合理,能区分学生的等级。为了估计区分度,将考生分成高分组和低分组两个组,分别统计高分组和低分组的得分率,把区分度定义为:

式(3)中,Dqp是试题的鉴别度;Rhs是高分组的得分率;Rls为低分组的得分率。

试卷的鉴别定义如下:

式(4)中,De{为试卷的鉴别度;Depi为第i道题的鉴别度;Sqfi为第i道题的分值;Sef是试卷的总分;n表示试卷有n道试题;

(3)被组卷的次数:在组卷的时候,若某一试题被抽取参与组卷,则该参数加1,该参数是控制试卷之间差异性的重要标准。也即是说,在试题个体的选取中,将则重于被组卷次数少的试题。

1.2 组卷问题分析

组卷问题是属于多目标组合优化问题,主要考虑以下几个方面[4,5]:

(1)考试的难度和平均分须尽量满足试卷参数所设定的要求。

(2)考试成绩的分布图大致成正态分布。

(3)试卷中各章节所占的比例须尽量满足试卷参数所设定的要求。

以上三个方面是组卷时需要重点考虑的对象,也即是组卷生成后的试卷必须符合以上三个条件,下文的适应度函数章节将会解决这个问题。

2 组卷算法设计

本组卷算法基本上采用了遗传算法的运算步骤,不同之处在于补充了算法的预处理过程,该过程为算法的优化提供了基础,组卷算法流程图如图一所示。

2.1 算法预处理

预处理主要是对试题的搜索空间进行筛选和排序,需要考虑的因素有:排除一部分被指定课程和章节以外的试题、排除一部分被指定题型以外的试题、排除一部分鉴别度太低的试题和排除一部分被组卷次数太高的试题。试题的搜索空间大小可以定义为:

式(5)中,SI是搜索空间的大小;Ne是试卷的试题总数。Ndb是试题库中的试题总数;k为系数,用来控制搜索空间和试卷题目数之间的关系。

2.2 编码方法

二进制编码方法是遗传真法中最常用的一种编码方法,试题库中的每一道试题都会对应着二进制串中的每一位,而二进制串的长度即是试题库所有试题的总数目,若第i位二进制位为0的时候,即说明它所对应的试题库中第i道试题没被选中,若第位二进制位为1的时候,即说明它所对应的试题库中第i道试题被选中,因此,二进制串中1的总数即代表着试卷的试题总数。这种编码方法结构清晰,容易操作,变异操作也不会出现非法解。

2.3 初始化群体

初始群体的设计主要讨论两个问题,一个是如何产生初始化群体,另一个是初始群体的规模。为了体现所生成试卷的差异性,需要考虑采用试题被组卷次数这个参数,也就是说,试题被抽取组卷的命中率与这个参数有关,试题的命中率为:

式(6)中,Rsci是第i道题根据试题被组卷次数计算出来的试题被抽取组卷的命中率;Cqsmax是试题搜索空间中最高的被组卷次数;Cqsi是第i道题的被组卷次数。

初始群体可以按试题的命中率随机抽取试题组成第一代试卷,命中率高的试题,被抽取的概率就大。接着,还要考虑初始群体的规模问题,也就是说初始群体由多少个个体组成才比较合适?考虑到具体情况,可以把群体的默认规模Sc赋值为10。

2.4 适应度函数

根据组卷问题分析,可以将组卷的三个条件转换成目标函数,也即是适应度函数。

(1)解决难度和平均分约束条件问题,其实两者是同一个问题,只要考虑试卷的难度一个条件就可以了。试卷的难度计算公式在前面公式给出,因此试卷的难度适应度函数可以表示为:

式(7)中,fda是试卷难度的适应度;Ded是试卷的难度;Dc是组卷时手工预计指定的难度;δda是试卷难度适应度的控制参数,其默认值可以设置为0.1。

(2)解决成绩分布图成正态分布约束条件问题,最关键的是要防止成绩分布图出现驼峰的形状,为了防止出现这种现状,判断所抽取的试题中,某一难度的试题的分值的和占试卷总分的比例大于某一指定比例就可以近似地达到要求。因此,该条件的适应度函数可以表示为:

式(8)中,fsa是成绩正态分布的适应度;Sqfη表示难度为η的试题的分值;Sef表示试卷的总分;n是试卷的试题数;δsa是控制参数,用来控制被指定的某一难度的试题的总分占试卷总分的比例的大小δsa的默认值可以赋值为50%。

(3)解决各章节所占的比例问题,首先得求出试卷中各章节试题分值占试卷总分的比例,公式如下:

式(9)中,Pei是第i章试题的总分占试卷总分的比例;Sqfi是第i章试题的分值;Sef是试卷总分;

根据上述计算公式,便可以求得该目标条件的适应度函数,该条件的适应度函数可以表示为:

式(10)中,fca是章节比例的适应度;Pei是第i章试题的总分占试卷总分的比例;Pci是第i章手工预设置的比例;δca是控制参数,用来控制章节比例设置差异程度,该参数的默认值赋值为20%。

通过上述三个目标函数适应度的计算公式,便可以求得试卷群体的适应度函数了,计算方式采用将以上三个适应度加权相加的方法,计算公式如下:

式(11)中,λda是fda的权重系数;λsa是fsa的权重系数;λca是fca的权重系数。这三个权重系数决定了这三个适应度的重要程度,根据实际情况,难度适应度是最重要的,因此,它大小会很大程度上影响到试卷整体的适应度,默认取值为0.5,而其它两个适应度相对次要,它们的默认取值都为0.25。试卷适应度的值越小,说明试卷的适应度越强,也就是说当试卷的适应度的计算结果大于等于0,小于等于0.1的时候,试卷可以达到比较理想的状态,这时可以继续繁殖优化,也可以结束繁殖,输出试卷。

2.5 选择算子

根据组卷问题的实际情况,采用排序选择组合和最优保存策略相结合的思想进行选择算子的设计,具体的操作过程如下:

(1)对群体中的每份试卷的适应度按由好到差进行排序。

(2)淘汰适应度最差的若干份试卷个体。

(3)计算迄今为止最好适应度的试卷,复制该试卷,即生成新的试卷个体。

(4)从试题的搜索空间中,随机产生生成新的试卷个体。

2.6 交叉算子

采用多点交叉算子的设计思想,详细的交叉算子的操作步骤如下:

(1)确定试卷个体的配对方式,由适应度最高的试卷与适应度第2高的试卷进行配对,适应度第3高的试卷与适应度第4高的试卷进行配对,以此类推,在选择算子中,新产生的试卷也相互进行配对。

(2)设置各试卷的交叉点,以题型为划分标准,分别计算试卷中各题型段中试题的适应度。

(3)在配对的两份试卷中,把各对应的题型段中适应度高的抽取出来重组一份试卷,各对应的题型段中适应度低的抽取出来重组另一份试卷。

2.7 变异算子

采用基本位变异算子,操作步骤如下:

(1)按相关的统计建议,变异算子的变异概率一般不会取值大于0.1,考虑到试卷的试题数量有限,变异算子的变异概率默认取值为0.05。

(2)对于组卷问题来说,要保证题目数的固定不变,变异的位数必定是偶数,因此要保证二进制编码串中1的个数不变,假如二进制编码串中有一位0变成1,肯定会有另一位从1变成0,而且它们都属于同一个题型段里面的,这样才能保证每一种题型的题目数也是一定的。

3 组卷算法实验

采用本算法和随机抽取算法分别组5份试卷,并将实验结果作比较,如表一所示。

实验结果表明,随机抽取算法的组卷时间比较短,可是在试卷的难度、成绩分布、试卷差异度和章节比例几个方面分析,远远比不上遗传算法。特别是试卷的难度和章节比例这两个重要的条件更是无法估算,严格上说,比较正式的考试一般都不会采取该方法来组卷,因为它不科学,也不合理。

4 结束语

现有的标准化试题库和网上考试系统的研究才刚起步,没有统一的标准,各地和各学校的具体情况不大相同,一般考试系统的设计都是结合各自的情况而研究的,因而参差不齐。同样,组卷算法更是多种多样,就算采用同一种理论来解决组卷问题,它们的详细方式和步骤也不大相同,实现的效果也是不一样的。本文充分考虑了这些差异性,并力求研究和设计出符合一般情况下的网上考试系统和组卷算法,同时对算法优化做了充分的考虑,取得了比较理想的结果。

参考文献

[1]杨青.基于遗传算法的试题库自动组卷问题的研究[J].济南大学学报(自然科学版),2004,3(18).

[2]孙勇,柏云.基于遗传算法的试题组卷策略[J].淄博学院学报(自然科学版),2002,(3):27-28.

[3]全惠云,范国闯等.基于遗传算法的试题库智能组卷系统研究[J].武汉大学学报(自然科学版),1999,(5):758-760.

[4]于晓强,刘柏等,谢益武.基于改进遗传算法的组卷策略与实现[J].微电子学与计算机,2006,23(12).

3.操作系统clock算法 篇三

一、基本信息:

a)实验题目:银行家算法的实现 b)完成人姓名:韩璐璐 c)学号:71114115 d)报告日期:2016.5.27

二、实验目的

通过实验,加深对多实例资源分配系统中死锁避免方法——银行家算法的理解,掌握Windows环境下银行家算法的实现方法,同时巩固利用Windows API进行共享数据互斥访问和多线程编程的方法。

三、实验内容

1.在Windows操作系统上,利用Win32 API编写多线程应用程序实现银行家算法。

2.创建n个线程来申请或释放资源,只有保证系统安全,才会批准资源申请。3.通过Win32 API提供的信号量机制,实现共享数据的并发访问。

四、程序运行时的初值和运行结果(系统截图)

五、源程序并附上注释 #include #include #include #include using namespace std;int r[3] = { 3, 3, 2 };//系统拥有的资源 int r0 = 0, r1 = 0, r2 = 0;//记录申请资源 class pcb { public: int id;bool state;int max[3];int alc[3];int need[3];

pcb(){ } void init(){

state = false;

cout << “请输入进程的id,各个资源总需求量和已占用资源” << endl;

cin >> id;

cout << “a,b,c三种资源的最大使用量” << endl;

cin >> max[0] >> max[1] >> max[2];

cout << “a,b,c三种资源的已占有量” << endl;

cin >> alc[0] >> alc[1] >> alc[2];} int rd(int n){

return rand()%(n + 1);

} int request(){

// Sleep(1000);

r0 = rd(max[0]alc[1]);

r2 = rd(max[2]alc[0]))&& r1 ==(max[1]alc[2]))

{

r[0] = r[0] + alc[0];

r[1] = r[1] + alc[1];

r[2] = r[2] + alc[2];

return 1;

}

return 2;

} };bool safe(vector

temp, int i){ int u = r[0]r1, l = r[2]1;j++)

temp[j] = temp[j + 1];temp.pop_back();int size = temp.size();//记录下容器内还有多少个进程

// int range[size];//记录下队列

int x = 0;//计数器

while(!temp.empty()){

static int j = 0;

if((temp[j].max[0]temp[j].alc[1])<= k &&

(temp[j].max[2]1;e++)

temp[e] = temp[e + 1];

temp.pop_back();

if(j >= temp.size())

j = 0;

}

else

{

j++;

if(j >= temp.size())

j = 0;

}

x++;

if(x ==(size*size))

{

cout << “没有安全队列,以上情况不成立” << endl;

cout << endl;

return false;

}

} return true;} int main(){ srand(time(0));pcb p[4];vector

vp;for(int i = 0;i<4;i++){

p[i].init();

vp.push_back(p[i]);} int x = 0;//计算器

int c;cout << “请选择分配资源方法:1.银行家算法 2.随机算法” << endl;cin >> c;switch(c){ case 1:

while(!vp.empty())

{

int a;

static int i = 0;

if((a = vp[i].request())!= 0)

{

if(a == 1)

endl;

r[1] << “ c

{

cout << ”进程“ << vp[i].id << ”已经结束“ <<

for(int j = i;j

r[1] = r[1]r2;

cout << ”a资源还剩“ << r[0] << ” b资源还剩“ << r[1] << ” c资源还剩“ << r[2] << endl;

cout << endl;

}

i++;

if(i >= vp.size())

i = 0;

}

}

else

i++;

if(i >= vp.size())

i = 0;

x++;

if(x >= 200)

{

cout << ”初始化的表不安全“ << endl;

return 0;

}

}

cout << ”进程已经全部结束“ << endl;

break;case 2:

while(!vp.empty())

{

int a2;

static int i2 = 0;

if((a2 = vp[i2].request())!= 0)

{

if(a2 == 1)

{

cout << ”进程“ << vp[i2].id << ”已经结束“ << endl;

for(int j = i2;j

r[1] = r[1]r2;

cout << ”a资源还剩“ << r[0] << ” b资源还剩“ << r[1] << ” c资源还剩“ << r[2] << endl;

cout << endl;

i2++;

if(i2 >= vp.size())

i2 = 0;

}

}

else

i2++;

if(i2 >= vp.size())

i2 = 0;

x++;

if(x >= 200)

{

cout << ”产生死锁“ << endl;

return 0;

}

}

cout << ”进程已经全部结束“ << endl;

break;default:

cout << ”选择错误“ << endl;

break;

} system(”pause");return 1;}

要求:实验报告以电子版的形式通过Email提交给助教,做到内容翔实、图表清晰,层次分明,标题突出。

4.三对角系统算法研究的论文 篇四

【摘要】在科学和工程计算中,许多问题往往归结为三对角线性方程组的求解,其并行算法的研究具有重要意义。文章全面总结了当前求解三对角线性方程组的两类并行算法:直接解法和迭代解法,并介绍了其特点。

【关键词】三对角线性方程组;分治策略;并行算法;算法可扩展性

一、概述

三对角线性方程组的求解是许多科学和工程计算中最重要也是最基本的问题之一。在核物理、流体力学、油藏工程、石油地震数据处理及数值天气预报等许多领域的大规模科学工程和数值处理中都会遇到三对角系统的求解问题。很多三对角线性方程组的算法可以直接推广到求解块三对角及带状线性方程组。由于在理论和实际应用上的重要性,近来三对角方程组的并行算法研究十分活跃。

大规模科学计算需要高性能的并行计算机。随着软硬件技术的发展,高性能的并行计算机日新月异。现今,SMP可构成每秒几十亿次运算的系统,PVP和COW可构成每秒几百亿次运算的系统,而MPP和DSM可构成每秒万亿次运算或更高的系统。

高性能并行计算机只是给大型科学计算提供了计算工具。如何发挥并行计算机的潜在性能和对三对角系统进行有效求解,其关键在于抓住并行计算的特点进行并行算法的研究和程序的设计与实现。另外,对处理机个数较多的并行计算系统,在设计并行算法时必须解决算法的可扩展性,并对可扩展性进行研究和分析。

二、问题的提出

设三对角线性方程组为

AX=Y(1)

式中:A∈Rn×n非奇异,αij=0,。X=(x1,x2,…xn)TY=(y1,y2,…yn)T。

此系统在许多算法中被提出,因此研究其高性能并行算法是很有理论和实际意义的。

三、并行求解三对角系统的直接解法

关于三对角线性方程组的直接求解已经有大量并行算法,其中Wang的分裂法是最早针对实际硬件环境,基于分治策略提出的并行算法。它不仅通信结构简单,容易推广到一般带状线性方程组的并行求解,而且为相继出现的`许多其它并行算法提供了可行的局部分解策略。

近20年来求解三对角方程组的并行算法都是基于分治策略,即通过将三对角方程组分解成P个小规模问题,求解这P个小规模问题,再将这些解结合起来得到原三对角方程组的解。一般求解三对角方程组的分治方法的计算过程可分为3个阶段:一是消去,每台处理机对子系统消元;二是求解缩减系统(需要通信);三是回代,将缩减系统的解回代到每个子系统,求出最终结果。具体可分为以下几类:

(一)递推耦合算法(RecursiveDoubling)

由Stone于1975年提出,算法巧妙地把LU分解方法的时序性很强的递推计算转化为递推倍增并行计算。D.J.Evans对此方法做了大量研究。P.Dubois和G.Rodrigue的研究表明Stone算法是不稳定的。

(二)循环约化方法(CyclicReduction)

循环约化方法由Hockey和G.Golub在1965年提出,其基本思想是每次迭代将偶数编号方程中的奇变量消去,只剩下偶变量,问题转变成求解仅由偶变量组成的规模减半的新三对角方程组。求解该新方程组,得到所有的偶变量后,再回代求解所有的奇变量。即约化和回代过程。由于其基本的算术操作可以向量化,适合于向量机。此方法有大量学者进行研究,提出了许多改进的方法。例如,Heller针对最后几步的短向量操作提出了不完全循环约化方法;R.Reulter结合IBM3090VF向量机的特点提出了局部循环约化法;P.Amodio针对分布式系统的特点改进了循环约化方法;最近针对此方法又提出对三对角方程组进行更大约化步的交替迭代策略。

(三)基于矩阵乘分解算法

将系数矩阵A分解成A=FT,方程Ax=b化为Fy=b和Tx=y两个方程组的并行求解。这种算法又可以分为两类:

1.重叠分解。如Wang的分裂法及其改进算法就属于这一类。P.Amodio在1993年对这类算法进行了很好的总结,用本地LU、本地LUD和本地循环约化法求解,并在1995年提出基于矩阵乘分解的并行QR算法。H.Michielse和A.VanderVorst改变Wang算法的消元次序,提出了通信量减少的算法。李晓梅等将H.Michielse和A.VanderVorst算法中的通信模式从单向串行改为双向并行,提出DPP算法,是目前最好的三对角方程组分布式算法之一。骆志刚等中依据DPP算法,利用计算与通信重叠技术,减少处理机空闲时间取得了更好的并行效果。此类算法要求解P-1阶缩减系统。

2.不重叠分解。例如Lawrie&Sameh算法、Johsoon算法、Baron算法、Chawla在1991年提出的WZ分解算法以及Mattor在1995年提出的算法都属于这一类。此类算法要求解2P-2阶缩减系统。

(四)基于矩阵和分解算法

将系数矩阵分解成A=Ao+△A,这类算法的共同特点是利用Sherman&Morrison公式将和的逆化为子矩阵逆的和。按矩阵分解方法,这种算法又可分为两类:

1.重叠分解。这类算法首先由Mehrmann在1990年提出,通过选择好的分解在计算过程中保持原方程组系数矩阵的结构特性,具有好的数值稳定性,需要求解P-1阶缩减系统。

2.不重叠分解。Sun等在1992年提出的并行划分LU算法PPT算法和并行对角占优算法PDD算法均属于这一类。需要求解2P-2阶缩减系统。其中PDD算法的通讯时间不随处理机的变化而变化,具有很好的可扩展性。X.H.Sun和W.Zhang在提出了两层混合并行方法PTH,其基本思想是在PDD中嵌入一个内层三对角解法以形成一个两层的并行,基本算法是PDD,三对角系统首先基于PDD分解。PTH算法也具有很好的可扩展性。

四、并行求解三对角系统的迭代解法

当稀疏线性方程组的系数矩阵不规则时,直接法在求解过程中会带来大量非零元素,增加了计算量、通信量和存储量,并且直接法不易并行,不能满足求解大规模问题的需要。因此通常使用迭代法来求解一般系数线性方程组和含零元素较多三对角线性方程组。迭代法包括古典迭代法和Krylov子空间迭代法。

古典迭代法包括Jacobi、Gauss-Seidel、SOR、SSOR等方法。通常采用红黑排序、多色排序和多分裂等技术进行并行计算。由于古典迭代法有收敛速度慢、并行效果不好等缺点,目前已较少用于直接求解大型稀疏线性方程组,而是作为预条件子和其它方法(如Krylov子空间方法)相结合使用。

Krylov子空间方法具有存储量小,计算量小且易于并行等优点,非常适合于并行求解大型稀疏线性方程组。结合预条件子的Krylov子空间迭代法是目前并行求解大型稀疏线性方程组的最主要方法。

给定初值X0,求解稀疏线性方程组AX=Y。设Km为维子空间,一般投影方法是从m维仿射子空间X0+Km中寻找近似解Xm使之满足Petrov-Galerkin条件

Y-AXm┻Lm

其中Lm为另一个维子空间。如果Km是Krylov子空间,则上述投影方法称为Krylov子空间方法。Krylov子空间Km(A,r0)定义为:

Km(A,r0)=span{r0,Ar0,A2r0,…,Am-1r0}

选取不同的Km和Lm就得到不同的Krylov子空间方法。主要算法包括四类:基于正交投影方法、基于正交化方法、基于双正交化方法、基于正规方程方法。

Krylov子空间迭代法的收敛速度依赖于系数矩阵特征值的分布,对于很多问题,直接使用迭代法的收敛速度特别慢,或者根本不收敛。因此使用预条件改变其收敛性,使中断问题可解,并加速收敛速度是需要的。目前人们研究的预条件技术可分为四类:采用基于矩阵分裂的古典迭代法作为预条件子、采用不完全LU分解作预条件子、基于系数矩阵近似逆的预条件子、结合实际问题用多重网格或区域分解作预条件子。对Krylov子空间和预条件Krylov子空间方法有详细的讨论。

预条件Krylov子空间方法的并行计算问题一直是研究热点,已提出了一系列好的并行算法。目前预条件Krylov子空间方法的计算量主要集中在矩阵向量乘上。虽然学者们做了大量的研究工作,但是还没找到效果好,又易于并行的预条件子。

需要特别指出的是,对于一般线性代数方程组的并行求解,其可扩展并行计算的研究已相对成熟,并已形成相应的并行软件库,如美国田纳西亚州立大学和橡树岭国家实验室研制的基于消息传递计算平台的可扩展线性代数程序库ScaLAPACK和得克萨斯大学开发的界面更加友好的并行线性代数库PLAPACK。我们借鉴其研究成果和研究方法,对三对角线性方程组并行算法的研究是有帮助的。

五、结语

三对角线性方程组的直接解法,算法丰富,程序较容易实现。但计算过程要增加计算量,并且大部分算法都对系数矩阵的要求比较高。迭代解法适合于非零元素较多的情况,特别是结合预条件子的Krylov子空间迭代法已成为当前研究的热点。

尽管三对角系统并行算法的研究取得了很多成果。但是还存在一些问题:直接法中,分治策略带来计算量和通信量的增加,如何减少计算量和通信量有待于进一步的研究;目前直接算法均基于分治策略,如何把其它并行算法设计技术,如平衡树和流水线等技术应用到三对角系统的并行求解中也是需要引起重视的方向;对于非对称系统还没找到一种通用的Krylov子空间方法;Krylov子空间方法的并行实现时仅考虑系数矩阵与向量乘,对其它问题考虑不够;以往设计的并行算法缺乏对算法可扩展性的考虑和分析。

【参考文献】

5.操作系统clock算法 篇五

GIS数据模型的模糊性质及操作算法

传统GIS数据模型反映不了地理世界的连续性.该文以模糊集理论为基础,依据地理实体在时、空、属三域的物理性质和GIS数据模型,提出了隶属度归一性.隶属度归一性是适用于多维GIS数据模型的一个基本性质,传统模糊集理论中的`“交”算子与“并”算子不能满足隶属度归一性.因此,在GIS中有必要引入新的“叠加算子”.该文还给出了两个满足隶属度归一性的叠加算法.

作 者:王晓栋 党安荣 毛其智 作者单位:清华大学,建筑学院,北京,100084刊 名:清华大学学报(自然科学版) ISTIC EI PKU英文刊名:JOURNAL OF TSINGHUA UNIVERSITY(SCIENCE AND TECHNOLOGY)年,卷(期):42(8)分类号:P23关键词:模糊集理论 不确定性 隶属度归一性 叠加算法

6.系统发生网络构建算法综述 篇六

通常用系统树来表示一组分类单元的进化关系,这一模式有利于假设的讨论和检验。然而当描述更复杂的进化关系时,系统树的功能则略显不足。随着研究的逐渐深入,科学家们发现有些物种在进化过程中发生了网状进化事件,如反转( reversal) 、移位( translocation) 和转位( transposition) 、重组( recombination) 、水平基因转移( horizontal gene transfer, HGT) 、杂交( hybridization) 、基因转移或者基因重复和丢失[1 -6]等,则此时生物的父代即不止一个,系统树不能描述各代之间的进化关系,因此促动了系统发生网络( phylogenet- ic network) 的出现。系统发生网络构建方法及理论分析的研究是计算生物学的一个重要方向。系统发生网络是系统树的一般形式,又可译作系统演化网络、系统进化网络、进化网络。该种网络更适合那些发生了网状进化事件的数据,而且,对于树式进化模式( 碱基的替代、插入、删除等) 进化而来的数据,系统发生网络也可以实现数据中冲突信息的清晰表达,如由于不完全谱系分类机制或者是由于进化模型假设的不足引起的冲突信息[7]。系统发生网络是一个无环图,图中有些节点的父节点个数≥ 2( 这种节点也被称为网络节点) ,如果图中没有网络节点,那么这时的系统发生网络就是一棵树。

系统发生网络根据拓扑结构分为无根( unrooted) 网络和有根( rooted) 网络; 根据功能分为隐式( implicit) 和显式( ex- plicit) 网络[8]。隐式网络( 例如分割网络和准中位数网络) 则可用来表示冲突信息,这些冲突信息可能来自各种原因, 如模型误设( model misspecifi cation) ; 而显式网络则是尽力捕获生物进化过程中的网络进化事件,如杂交( hybridiza- tion)[9 -10]、重组( recombination)[11 -15]及水平基因转移( hori- zontal gene transfer,简称HGT)[7,16 -18]。显式网络中的内部节点表示祖先物种,且其中的网络节点对应所考虑的生物进化过程[14 -16],而隐式网络中网络节点没有任何生物解释。 显式网络通常是有根的,因为生物进化过程本质上是有向的。然而有根系统发生网络可能是隐式网络,这取决于对相应网络进行构建和解释的具体方式[8]。

1无根系统发生网络构建算法

无根系统发生网络是无根树的一般化。无根系统发生网络都是隐式网络,主要包括两类: 分割网络( Split network) 和准中位数网络( Quasi - median network) 。在无根系统发生网络方面,分割( Split) 的概念起了重要作用。下面将详细给出分割的定义。

定义1设X是一物种集合,A和B是X的非空子集,且 和A∪B=X,则S=A|B称为X的一个分割。

有时将分割A|B记为A/B或者B/A。分割S的大小记为size(S)=min{|A|,|B|}。大小为1的分割称为是平凡的(trivial)分割,否则称为非平凡的(non-trivial)分割。设T是X上的一棵无根系统树,那么T上的每一边定义了X的一个分割。

分割网络可以从很多不同的数据集( 如距离矩阵、无根系统树集、序列及四分体) 构建得到。从这些数据构建分割网络时,大部分算法都是首先计算出一个加权分割集( 这里的权重可能表示的是距离或者特征变化量等) ,然后再由此加权分割集得到分割网络。由加权的分割集构建分割网络主要有两种方法: 凸包算法( convex hull)[19]和圆形网络算法( circular network)[20]。对于任何一分割集,凸包算法都能为S构建一个无根系统发生网络,且最坏情况是此网络包含指数级的节点数和边数。而圆形网络算法构建的网络仅包含平方级的节点数和边数。

从距离矩阵得到加权分割集的方法主要有Neighbor - Net方法[21]和分割分解方法[22]。从无根系统树构建加权分割集的主要方法有一致分割网络( consensus split network) 方法[23 -24]和Z - 闭包( Z - closure) 算法[25 -26]。软件Spitl- Tree4[27]是一个用来推导无根系统发生网络的非常方便的工具,此软件可以从序列、距离、树或者是分割来推导得出无根系统发生网络,软件中收集了很多方法,如Neighbor - net方法以及Z - 闭包算法。

2有根系统发生网络构建算法

有根系统发生网络分为显式网络和隐式网络。显式网络理论上能很好地反映分类单元间的网状进化事件,由于进化是有向的,所以显式网络是有根的。Maddison基于rSPR ( rooted Subtree Prune and Regraft) 距离构建了系统发生网络[28]。Nakhleh等[29]对Maddison的算法作了改进,提出了构建含有一个网络节点的系统发生网络的多项式算法,且此算法通过对基因树压缩的方式考虑了基因树中所带有的误差,使得此算法更具有实际应用价值。Wang等[30]及Gus- field等[31]提出了从序列特征构建重组系统发生网络的算法。

Hein[32]首次对构建系统树的最大简约法延伸到构建系统发生网络上。此后,Nakhleh等[33]旨在促进系统发生网络的构建和评估,而为每个网络定义了最简标准。文献[33]中提出的算法Net2Trees可用来计算网络的最简值,Net2Trees算法的时间复杂度是指数级的。之后,Jin等[34]改进了这一Net2Trees算法,并提出了解决此问题的线性时间算法[35]。 以上介绍的最大简约法都是用相同的方式定义网络的最简值,都是将网络包含的所有树的最简值的最小值作为此网络的最简值。Kannan等[36]提出了另一种网络最简值的定义, 即可定义为网络所有边的替换代价之和,并将计算系统树最优简约值( optimum parsimony score) 的Sankoff等[37 -38]方法延伸到系统网络上。

Jin等[39]提出了构建系统发生网络的最大似然法,首先,基于树的似然值给出此网络的似然值计算公式,且设计了启发式算法来计算此值,然后利用分支定界启发式算法及EM算法搜索最优网络,并且对真菌和质体中的15种生物及古细菌中的14种生物分别构建了水平基因转移网络。 Snir等[40 -41]为构建和分析系统发生网络提出了一个新的概率模型NET - HMM。模型中结合了最大似然法及马尔科夫模型,且假设DNA序列或者核苷酸序列上的相邻位点的进化是相互依赖的,这一假设与生物实际过程更为相符。在此模型中,隐状态是系统发生网络所包含的树。

隐式网络方面,Huson等提出的cluster network方法是利用网络弹出算法( network - popping algorithm) 来构建有根隐式网络方法[42]。此方法首先构建哈塞图( Hasse dia- gram) ,然后在此基础上以添加边的方式构建网络节点。其后Huson等[43]提出了galled network方法,这是首先利用种子增长算法( seed - growing algorithm) 找出输入树集合的RMCS问题的解,即,去掉一些物种后的树集是不冲突的,这时可以为不冲突的树集构建一棵系统树T,最后再将去掉的物种添加到T上,从而得到系统发生网络。Van Iersel等又提出了CASS方法[7],此方法所构建的网络与实际生物网络更加相符,但是当所构建的网络很大时,该方法速度较慢,运行时间也长,不利于使用者在较短时间内得到结果网络。

程序Dendroscope[44]主要可用来计算有根系统发生网络,其中包含一些构建隐式网络的方法,如CASS方法、galled network方法及cluster network方法; 程序中还包括一些构建显式网络的方法,如杂交网络方法。

3结论与展望

上一篇:学校团支书竞选稿下一篇:卫生文明城镇创建