操作系统银行家算法实验报告(共7篇)
一、基本信息:
a)实验题目:银行家算法的实现 b)完成人姓名:韩璐璐 c)学号:71114115 d)报告日期:2016.5.27
二、实验目的
通过实验,加深对多实例资源分配系统中死锁避免方法——银行家算法的理解,掌握Windows环境下银行家算法的实现方法,同时巩固利用Windows API进行共享数据互斥访问和多线程编程的方法。
三、实验内容
1.在Windows操作系统上,利用Win32 API编写多线程应用程序实现银行家算法。
2.创建n个线程来申请或释放资源,只有保证系统安全,才会批准资源申请。3.通过Win32 API提供的信号量机制,实现共享数据的并发访问。
四、程序运行时的初值和运行结果(系统截图)
五、源程序并附上注释 #include
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提交给助教,做到内容翔实、图表清晰,层次分明,标题突出。 关键词:GIS,选址,哈夫模型,正态分布 1 引言 基于位置的商业智能 (LBI, Location-based Business Intelligent) 是GIS领域、商业智能 (BI, Business Intelligent) 领域近年来兴起的新兴热点研究领域, 是传统GIS领域、商业智能领域的学科交叉研究方向, 也是GIS领域、商业智能领域的重要发展方向。银行业正在经历一次迅速的变革, 改进和完善支行网点是当务之急[1]。对于直接面对储户的网点来说, 合理的网点布局是完善支行网点的重要部分。地理信息系统 (GIS) 能将各种信息集中并表现到地图中, 提供更直观、全面的信息, 因而利用GIS进行网点选址能使银行网点布局更为合理。 现在, 利用GIS进行网点选址已有较多的研究, 并提出了一些模型, 如空间交互模型 (spatial interaction models) 或平面/网络优化模型 (planar or network optimization models) [2]。Huff模型是空间交互模型中的一种, 在网点选址中有较多的应用, 如Atsuyuki Okabe等用Huff模型来评估在街道网络中的零售网点的需求[3], Philip S.用Huff模型来建模银行网点撤销决策支持系统[4]等。用Huff模型在对银行网点选址进行建模时, 存在以下不足:首先, 对具有大量客户的网点来说, Huff模型在评估客户时没有反应其统计规律;其次, 当客户到网点的距离趋近于零时, 其距离因子趋近于无究大;再次, Huff模型在应用中需要大量的统计工作来确定其相应参数, 增加了应用成本。因此, 本文提出一种基于正态分布的Huff模型, 减少了初步应用的参数, 并用Arc Engine组件进行了实现, 结果表明, 本模型对具有大量客户的网点进行评估时具有更高的准确性和易用性。 2 基于正态分布的Huff模型 2.1 Huff模型 在哈里斯的市场潜能模型的基础上, 美国加利福尼亚大学的经济学者戴维·哈夫 (D.L.Huff) 教授于1963年提出了关于预测城市区域内商圈规模的模型——哈夫概率模型。 哈夫概率模型可以表示为一个函数, 其值为:一个位置的吸引力除以某顾客位置到该位置的距离, 其值再除以所有顾客到该位置的值的总和[5]。即: 在哈夫概率模型中, Pij为位于位置i的顾客到位于位置j的网点存款的概率;tij为位置i到位置j的距离或从位置i到位置j所花的时间;n为位置j周围的网点数。 参数aj是一个相对于位置j的吸引力的一个量度。如果让aj=1, j=1, 2, …, n, 那么所有的网点被认为具有相同的吸引力, 顾客只是简单地选择到最近或花时间最短的网点去消费。 参数b控制距离递减特性, 表示顾客对距离或所花时间的敏感程度。如果顾客对距离很敏感, 那么b的值大于1。 2.2 基于正态分布的Huff模型 (normal distribution basedHuff model) 在顾客到银行网点存款的概率模型中, 对于基本业务同质的网点 (利率相同) , 可以假定居民的存款在平面上的概率分布密度[6]服从高斯正态分布 这里r为平面上任一点到居民所居住的小区的距离, 称上述分布为居民存款在平面上的原始分布, 只有当银行数很多, 且在平面上银行呈较均匀分布时, 上式才适用。网点距离顾客越近, 顾客到选择该网点概率越高。 在Huff模型中, 控制距离递减特性的参数b一般取值大于1, 例如为2。那么当tij趋近于0时, 趋近于无穷大。表示距离对顾客选择该网点的影响, 为了避免其趋近于无穷大的问题, 在顾客选择银行网点过程中, 我们认为f (r) 更能表示本影响, 如图1所示。 令则: 式中, r为在位置i的顾客到网点位置j的距离或所花的时间。也可以表示为tij。Pij为位于位置i的顾客到位于位置j的网点存款的概率。 3 算法 使用nd-Huff模型进行银行选址分析时, 首先要建立待选网点, 然后对每个网点进行一定半径的缓冲区分析, 找出该缓冲区内的潜在顾客;计算每个顾客到该网点进行业务的概率, 根据概率计算该顾客在该网点存款的期望值;然后计算该网点的期望值, 得出最优方案。所以, 选址分析要经过如下阶段: (1) 估计某个顾客到某个网点存款的概率; (2) 计算该顾客在该网点存款的期望值; (3) 计算每个网点吸纳存款的期望值; (4) 应用该模型评估银行网点。 3.1 概率估计 在估计某个顾客i到该网点j存款的概率时, 首先计算出i到j的距离r, 然后根据公式 (3) 计算出位于位置i的顾客到位于位置j的网点存款的概率Pij。 3.2 顾客到该网点存款的期望值计算 某网点j的存款期望值由在位置i的顾客存款总额Ci以及该顾客i到网点j存款概率Pij计算得到。其值为在位置i的顾客的存款总额Ci乘以在位置i的顾客到网点j存款的概率Pij, 即: 式中, Eij为在位置i的顾客到网点j存款的期望值, Pij为在位置i的顾客到网点j存款的概率, Ci为在位置i的顾客存款总额。 3.3 网点吸纳存款的期望值 在位置j的网点所能吸纳存款的期望值的计算相对简单, 只要将j覆盖范围内的所有顾客到网点j的存款期望值计算总和即得, 即: 式中, Tj为网点j吸纳存款的期望值, Eij为顾客i到网点j存款的期望值, n为网点j覆盖范围内的顾客数。 3.4 评估银行网点 在进行网点评估时, 需要遍历所有待选网点, 计算其吸纳存款的期望值, 然后根据一定的规则进行比较 (如选期望值最大的) , 即可得出最优解。 4 结论 在如图2所示的地图中, 选取了3个待选网点net1 (0.776 957 062 419 842, 0.412 393 823 655 657) , net2 (0.655 548 389 212 575, 0.133 257 090 777 184) , net3 (0.294 355 901 435 962, 0.311 553 101 520 397) , 分别用Huff模型和nd-Huff模型进行分析, 距离采用欧式距离, δ=0, 结果如表1所示。在Huff模型计算方式中, net3为最优方案, 而在nd-Huff模型中, net1为最优方案。 在图2中, 我们可以看出, 在net1的0.5半径范围内, 有17个点, 而在net3的0.5半径范围内, 只有14个点。因此, net1应当优于net3。所以, 我们认为nd-Huff模型在银行选址中, 具有比Huff模型更好的效果。基于本算法, 在基于LBI的商业银行管理系统中进行了实现, 如图3所示, 结果表明, 在初步的选址过程中, 只需要客户的位置信息及网点的有效商业半径等参数就可以得到较好的选址效果, 提高了模型的易用性。 参考文献 [1]Alan Genes, Fabienne Konik, Caroline Moss.Striving for Growth:Best Practices in Retail Banking Sales and Service Channels[EB/OL].http://www.boozallen.com/capabilities/Industries/industries_article/37999368?lpid=660614, 2007-06-13. [2]Richard L Church.Geographical Information Systems and Location Science[J].Computers&Operations Research, 2002, 29 (6) :541-562. [3]Atsuyuki Okabe, Kei-ichi Okunuki.A Computational Method for Es-timating the Demand of Retail Stores on a Street Network and its Im-plementation in GIS[J].Transactions in GIS, 2001, 5 (3) :209-220. [4]Philip S Morrison and Rachel O’Brien.Bank Branch Closures in New Zealand:The Application of a Spatial Interaction Model[J].Applied Geography, 2001, 21 (4) :301-330. [5]D Huff.A Probabilistic Analysis of Shopping Center Trade Areas[J].Land Economics, 1963, 39 (1) . [关键字] 实验报告自动批阅,系统分析 一、引言 实验报告网上自动批阅的目标是能让计算机像人一样对实验报告进行批阅,对实验目的、设备、原理、步骤、结果以及心得体会进行对错的判断并打分。实现实验报告自动批阅可利用人工智能等相关技术,在运用这些技术前,需了解实验报告的特征,并在此基础上提出整个实验报告自动批阅的工作流程,即实现方案。 二、实验报告提交格式设定 通常实验报告内容包括:实验名称、实验目的、实验设备、实验原理、实验步骤、实验结果、心得体会等;同时,应有学生基本信息等相关内容。针对实验报告网上评阅的特征,设定报告格式,使批阅过程更简单,化整为零,最后汇总得分。设定报告格式如下: 1、学生填写:学生学号、姓名,实验课程,实验名称,实验目的,实验设备,实验原理,实验步骤,实验结果,心得体会。 2、对实验目的、实验设备、实验原理、实验步骤、实验结果、心得体会要求学生按照知识点来填写,每个知识点以“句号”结束。 3、学生填写完每一部分的内容,以文本方式提交保存。 三、自动批阅工作流程 实验报告格式统一后,只需从数据库中提取出学生的实验报告;再根据实验名称从标准答案模板中提取该实验的标准答案模板;然后分别从学生报告和答案模板中提取实验目的、实验设备、实验原理、实验步骤、实验结果、心得体会六个部分的内容,对它们进行相应的处理,得到每个部分的成绩,最后把所有的成绩相加。批阅流程如下: 1、每个实验都有既定的名称,假设每个实验名称不同。此时,利用实验名称作为关键字,用人工智能中信息检索、关键字匹配方法对所有实验报告进行检索,把所有该实验的实验报告提取并分类。该实验记为A,该实验A的所有学生实验报告组成一个集,记为A(S1,S2,S3,S4……)其中Si代表第i份学生实验报告。 2、对分类出的实验A报告集中的每份实验报告(Si)进行逐步批阅,即按照实验目的、实验设备、实验原理、实验步骤、实验结果、心得体会进行单独批阅。分别把学生实验报告中的六部分记为Si1、Si2、Si3、Si4、Si5、Si6,简记为Sij;把标准答案模板中的上述六部分记为Wa1、Wa2、Wa3、Wa4、Wa5、Wa6,简记为Waj。 3、怎样进行这六部的批阅:以“实验目的”为例。首先,从当前批阅的实验报告中提取出“实验目的”部分的内容,再对“实验目的”部分的全部内容按照“句号”进行文本块划分,把划分得到的文本块记为Si1t(其中t的大小为该“实验目的”部分的内容中句号的个数)。因为规定学生在填写这部分内容时是按照知识点来作答的,且每一知识点都用“句号”来表示结束,所以按照“句号”来进行文本块的划分,实际上就是按照知识点来划分整个部分的内容。 4、对标准答案模板的“实验目的”部分内容全部提取,系统中答案的存储分每一部分单独存储,而每一部分中又以知识点加权值的形式存储,且每一个知识点为一条记录。在这里应提取出“实验目的”部分的全部知识点,并把它记录下来以供后面的批阅使用,记为Wa1t。 5、把3中得到的所有报告“实验目的”文本块Si1t进行文本预处理、句法分析、语法分析、语义分析以及信息抽取,得到报告信息抽取模块。记为pi1t(其中i、t与si1t中的i、t分别相同)。 6、对于4中得到的答案模板“实验目的”部分的所有知识点Wa1t,只需要进行知识点与权值的切分,把切分出来的知识点部分记为qa1t,相应知识点的权值记为ka1t。 7、对于6中得到的“实验目的”部分的每个知识点信息抽取模块qa1t与5中得到的所有学生报告实验目的部分的信息抽取模块pi1t进行模块间相似度的计算,把得到的相似度值中最大的一个乘上该知识点的权值,便得到了该知识点的得分,最后把所有知识点的得分用同样的方法得出后相加,得到“实验目的”部分的总分。 8、重复第3到第7,得出其余五部分的成绩,最后把这六部分的成绩相加就得到该份报告总成绩。 9、对同一实验的其他学生实验报告重复2到8进行批阅;对其他实验的实验报告的批改重复1到8就可完成批阅。 四、举例分析自动批阅工作流程 1、在学生上交的实验报告中,按当前批阅实验的实验名称进行搜索,把得到的实验报告进行单独管理。以“负反馈放大器实验”为例,把“负反馈放大器实验”记为A,并把搜索到的N份实验报告组成一个集,记为A(S1,S2,S3,S4……Sn)。同时把标准答案模板中“负反馈放大器实验”的标准答案模板记为Wa。 2、提取一份实验报告Si,对它的实验目的、实验设备等六部分分别进行批阅。以“实验目的”(记为Si1)为例来说明。首先提取“实验目的”的全部内容,按照“句号”进行文本块划分,把得到的文本块记为Si1t。例如学生报告中“实验目的”内容: (1) 了解多级阻容耦合放大器组成的一般方法。 (2) 了解负反馈对放大器性能指标的改善。 划分文本块后得到的内容: 文本块一: (1) 了解多级阻容耦合放大器组成的一般方法 文本块二:(2) 了解负反馈对放大器性能指标的改善。 其中把“文本块一”记为Si11,把“文本块二”记为Si12。 3、提取负反馈放大器答案模板中实验目的(Wa1)部分的全部知识点,并把各个知识点记为Wa1t。得到如下结果: 知识点一:多级阻容偶合 放大器 组成 方法|2# 知识点二:负反馈 对 放大器 性能 改善 |3# 其中把“知识点一”记为Wa11,把“知识点二”记为Wa12。 4、对2中得到的所有实验目的部分的文本块Si1t进行文本预处理、句法分析、语法分析、语义分析以及信息抽取,生成报告信息抽取模块。记为pi1t(其中i、t与si1t中的i、t分别相同)。以2中得到的结果为例,说明如下: 文本块一:1、了解多级阻容耦合放大器组成的一般方法。 文本块二:2、了解负反馈对放大器性能指标的改善。 信息抽取模块: 信息抽取模块一:多级阻容偶合 放大器 组成 方法 信息抽取模块二:负反馈 对 放大器 性能 改善 其中把“信息抽取模块一”记为pi11,把“信息抽取模块二”记为pi12。 5、对于3中得到的答案模板中实验目的部分的所有知识点进行知识点与权值的切分,因为在计算机中存储的答案模板中的每一部分的内容都是知识点的信息抽取模块和该知识点的权值,所以切分出来的知识点就是信息抽取模块。把切分出来的知识点部分记为qa1t,相应知识点的权值记为ka1t。实验目的全部知识点: 知识点一:多级阻容偶合 放大器 组成 方法 2。 知识点二:负反馈 对 放大器 性能 改善 3。 进行知识点与权值的切分后的结果: 信息抽取模块: 权值: 知识点一信息抽取模块:多级阻容偶合 放大器 组成 方法 2 知识点二信息抽取模块:负反馈 对 放大器 性能 改善 3 其中把“知识点一信息抽取模块”记为qa11,把“知识点二信息抽取模块”记为qa12;对于权值“2、3”相应的记为ka11、ka12。 6、把5中得到的第一个答案信息抽取模块qa11与4中得到的两个报告信息抽取模块pi11、pi12分别进行模块间相似度的计算,并取最大的相似度值。由于qa11和pi11这两个模块是完全一样的,相似度值为1(设定相似度的最大值为1),所以此时相似度值为1;然后取与qa11相对应的权值(ka11)2,与得到的相似度值相乘,得到了报告对qa11这个知识点回答的成绩,即为2分。分别计算出答案信息抽取模块剩余的相似度值,并得到成绩,两个知识点的成绩相加得到学生实验报告中实验目的部分的成绩,本例得到实验目的部分的成绩为5分。 7、上面是对一份报告中实验目的部分的批阅,对于同一份报告中的其余部分以及不同报告、不同实验的报告都按照这样的方法进行批阅。最后把同一份报告中六个部分的成绩相加便得到了这份报告的总成绩。 参考文献: [1] 刘其云、李中言,信息抽取的功能和实现方法,情报杂志,2005,5:67-68 实验报告 学生姓名 课 程 电力系统分析的计算机算法 学 号 专 业 电气工程及其自动化 指导教师 邱晓燕 二Ο一四 年 六 月 二日 实验一 潮流计算 一、实验目的 1.了解并掌握电力系统计算机算法的相关原理。 2.了解和掌握PSD-BPA电力系统分析程序稳态分析方法(即潮流计算)。3.了解并掌握PSD-BPA电力系统分析程序单线图和地理接线图的使用。 二、实验背景 随着科学技术的飞速发展,电力系统也在不断地发展,电网通过互联变得越来越复杂,同时也使系统稳定问题越来越突出。无论是电力系统规划、设计还是运行,对其安全稳定进行分析都是极其重要的。 PSD-BPA软件包主要由潮流和暂稳程序构成,具有计算规模大、计算速度快、数值稳定性好、功能强等特点,已在我国电力系统规划、调度、生产运行及科研部门得到了广泛应用。 本实验课程基于PSD-BPA平台,结合《电力系统分析计算机算法》课程,旨在引导学生将理论知识和实际工程相结合,掌握电力系统稳态、暂态分析的原理、分析步骤以及结论分析。清晰认知电力系统分析的意义。 三、原理和说明 1.程序算法 PSD-BPA电力系统分析程序稳态分析主要是潮流计算,软件中潮流程序的计算方法有P_Q分解法,牛顿_拉夫逊法,改进的牛顿-拉夫逊算法。采用什么算法以及迭代的最大步数可以由用户指定。 注:采用P-Q分解法和牛顿-拉夫逊法相结合,以提高潮流计算的收敛性能,程序通常先采用P-Q分解法进行初始迭代,然后再转入牛顿-拉夫逊法求解潮流。 2.程序主要功能 可进行交流系统潮流计算,也可进行包括双端和多端直流系统的交直流混合潮流计算。除了潮流计算功能外,该软件还具有自动电压控制、联络线功率控制、系统事故分析(N-1开断模拟)、网络等值、灵敏度分析、节点P-V、Q-V和P-Q曲线、确定系统极限输送水平、负荷静特性模型、灵活多样的分析报告、详细的检错功能等功能。 3.输入、输出相关文件 *.dat 潮流计算数据文件 *.bse 潮流计算二进制结果文件(可用于潮流计算的输入或稳定计算)*.pfo 潮流计算结果文件 *.map 供单线图格式潮流图及地理接线图格式潮流图程序使用的二进制结果文件 *.pff,*.pfd 中间文件(正常计算结束后将自动删除。不正常时,将留在硬盘上,可随时删除) pwrflo.dis 储存一个潮流作业计算时屏幕显示的信息。pfcard.def 定义潮流程序卡片格式文件,用户可更改及调整该文件。该文件安装时放在与潮流程序相同的目录中。打开TextEdit应用程序时先读入该文件。4.程序常用控制语句 常用的控制语句主要包括: (1)指定潮流文件开始的一级控制语句“(POWERFLOW, CASEID=方式名, PROJECT=工程名)” (2)指定计算方法和最大迭代次数的控制语句“/SOL_ITER, DECOUPLED=PQ法次数, NEWTON=牛拉法次数”; (3)指定计算结果输出的控制语句“/P_OUTPUT_LIST, „”;(4)指定计算结果输出顺序的控制语句“/RPT_SORT= „”; (5)指定计算结果分析列表的控制语句“/P_ANALYSIS, LEVEL= ?”;(6)指定潮流结果二进制文件名的控制语句“/NEW_BASE, FILE = 文件名”; (7)指定潮流图和地理接线图使用的结果文件控制语句“/PF_MAP,FILE=文件名”; (8)指定网络数据的控制语句“/NETWORK_DATA”;(9)指定潮流数据文件结束的控制语句“(END)”; 5.计算结果介绍(PFO文件) 潮流计算结果文件内容主要分下述几个方面: 1)程序控制语句列表。 2)输入、输出文件及输出的内容列表。 3)错误信息。如为致命性错误,则中断计算。4)误差控制参数列表。5)迭代过程。6)计算结果输出: 详细计算结果列表:按节点、与该节点相联接支路顺序,并根据用户的要求(通过控制语句控制)可按照字母、分区或区域排序输出潮流计算结果。 分析报告列表:并根据用户的要求(通过控制语句控制),输出各种潮流分析报告。 7)错误信息统计。6.算例 IEEE 9节点例题: 图1 IEEE9节点系统接线图 节点参数、线路参数及变压器参数分别见表1~表3。 表1 IEEE 9节点算例节点参数 表2 IEEE 9节点算例线路参数 表3 IEEE 9节点算例变压器参数 注:表1-表3中功率基准值为100MVA;电阻、电感值为标幺值。对应于上述系统及数据的潮流计算数据(IEEE90.DAT)见例1。例1: (POWERFLOW,CASEID=IEEE9,PROJECT=IEEE_9BUS_TEST_SYSTEM)/SOL_ITER,DECOUPLED=2,NEWTON=15,OPITM=0./P_INPUT_LIST,ZONES=ALL /P_OUTPUT_LIST,ZONES=ALL /RPT_SORT=ZONE /NEW_BASE,FILE=IEEE90.BSE /PF_MAP,FILE = IEEE90.MAP /NETWORK_DATA BS GEN1 16.501 999.999.1.04 B GEN1 230.01 B STATIONA 230.01 125.50.0 0.B STATIONB 230.01 90.30.0 0.B STATIONC 230.01 100.35.0 0.000 B GEN2 230.01 BE GEN2 18.001 163.999 10 25 B GEN3 230.01 BE GEN3 13.801 85.999.1025 .L-----------------transmission lines----------------------------L GEN1 230.STATIONA230..0100.0850.0440 L GEN1 230.STATIONA230.2.0100.0850.0440 L GEN1230.STATIONB230..0170.0920.0395 L STATIONA230.GEN2230..0320.1610.0765 L STATIONB230.GEN3230..0390.1700.0895 L GEN2230.STATIONC230..0085.0720.03725 L STATIONC230.GEN3230..0119.1008.05225.T-----transformers--------- T GEN116.5 GEN1230..0576 16.5 230.T GEN218.0 GEN2230..0625 18.0 230.T GEN313.8 GEN3230..0586 13.8 230.(END) 四、实验过程及结果 (一)IEEE9节点算例: 1.系统接线图: 2.在BPA软件建立模型,并进行计算,结果如下: 1)系统数据 2)计算过程迭代信息及详细的输出列表: 小结 3.406 -60.2 0.000 28.2 0.000 0.0 3.406 -32.0 -------------- -------------- -------------- -------------- 总结 3.406 -60.2 0.000 28.2 0.000 0.0 3.406 -32.0 * 并联无功补偿数据列表 /----------电容器(Mvar)-----------/ /-----------电抗器(Mvar)-------------/ 区域/分区 最大容量 使用容量 备用 未安排容量 最大容量 使用容量 备用 未安排容量 01 73.4 73.4 0.0 0.0 0.0 0.0 0.0 0.0 ------- ------- ------- ------- ------- ------- ------- ------- 总结 73.4 73.4 0.0 0.0 0.0 0.0 0.0 0.0 TRANSMISSION LINES CONTAINING COMPENSATION OWN ZONE BUS1 BASE1 ZONE BUS2 BASE2 ID PERCENT CASE CONTAINS NO TRANSMISSION LINES WITH SERIES COMPENSATION * 节点相关数据列表 节点 电压 /--------发电--------/ /---负荷----/ /-----无功补偿-----/ 类型 拥有者 分区 电压/角度 kV MW MVAR 功率因数 MW MVAR 使用的存在的未安排 PU/度 发电机1 16.5 16.5 105.4 23.1 0.98 0.0 0.0 0.0 0.0 0.0 S 01 1.000/ 0.0 发电机2 18.0 18.0 180.0 40.6 0.98 17.0 8.0 0.0 0.0 0.0 E 01 1.000/ 5.4 发电机3 13.8 13.8 85.0 13.8 0.99 0.0 0.0 0.0 0.0 0.0 E 01 1.000/ 1.6 母线1 230.0 239.3 0.0 0.0 0.0 0.0 21.6 21.6 0.0 01 1.040/-3.5 母线2 230.0 238.3 0.0 0.0 35.0 10.0 0.0 0.0 0.0 01 1.036/-0.6 母线3 230.0 240.3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 01 1.045/-1.3 母线A 230.0 232.6 0.0 0.0 125.0 70.0 20.5 20.5 0.0 01 1.011/-6.0 母线B 230.0 234.1 0.0 0.0 90.0 40.0 10.4 10.4 0.0 01 1.018/-5.7 母线C 230.0 235.6 0.0 0.0 100.0 55.0 21.0 21.0 0.0 01 1.024/-3.1 -------------- -------------------------------- 整个系统 370.4 77.6 367.0 183.0 73.4 73.4 0.0 电容器总和 73.4 73.4 0.0 电抗器总和 0.0 0.0 0.0 * 旋转备用数据列表 ------------有功功率----------- ------------------------无功功率----------------------- 区域/分区 最大值 实际出力 备用 最大值 最小值 已发无功 吸收无功 备用 (MW) (MW) (MW) (MVAR) (MVAR) (MVAR) (MVAR) (MVAR) 01 370.4 370.4 0.0 2997.0 0.0 77.6 0.0 2919.4 ------- ------- ------ ------- ------- ------- ------ ------- 总结 370.4 370.4 0.0 2997.0 0.0 77.6 0.0 2919.4 说明: 1.有功旋转备用不包含所有同步电动机的功率(如 抽水蓄能电机)。 有功出力为负值的发电机(包括电动机)作为负荷处理,不统计在内。 当最大出力值小于实际出力时,统计时最大出力值用实际出力值代替。 2.无功旋转备用不包含同步调相机的无功功率。 无功旋转备用只统计有功出力大于0并且基准电压小于30kV的发电机。 * 潮流计算迭代过程和平衡节点相关信息数据 计算结果收敛。牛顿-拉夫逊法迭代次数为 5次。 各区域平衡机出力数据列表 区域 平衡机 电压 额定有功 有功出力 无功出力 有功负荷 无功负荷 所属分区 SYSTEM 发电机1 16.5 1.000 0.00 105.41 23.11 0.00 0.00 01 * 没有遇到错误信息 23:03:48 3)单线图: (二)课本习题:E2-5 1.网络接线图: 2.程序: (POWERFLOW,CASEID=IEEE9,PROJECT=IEEE_9BUS_TEST_SYSTEM)/SOL_ITER,DECOUPLED=2,NEWTON=15,OPITM=0 /P_OUTPUT_LIST,ZONES=ALL /RPT_SORT=ZONE /NEW_BASE,FILE=IEEE90.BSE /PF_MAP,FILE = IEEE90.MAP /NETWORK_DATA.BUS-----------------节点数据-----BS 母线4 999 999 1.050 B 母线1 0.32 0.20 B 母线2 0.56 0.16 BE 母线3 0.5 999 1.10 .L-----------------支路数据-----L 母线1 母线2 0.11 0.40 0.015 L 母线2 母线4 0.08 0.40 0.014 L 母线4 母线1 0.12 0.51 0.019 .T--------------变压器数据,包括普通变压器、移相器、带调节的变压器等。 T 母线1 母线3 0.07 0.35 (END) 3.计算结果 4.系统单线图 五、总结及思考题 实验中遇到的问题及解决方法: 路径错误——————重设各个参数路径 卡片无法识别—————将参数规范化 本次实验使我初步掌握了PSD-BPA软件在电力系统潮流计算中的使用方法,收获良多,为今后的工作打下了基础。获益匪浅。 电力系统潮流计算是研究电力系统稳态运行情况的一种基本计算。它的任务是根据给定的运行条件和网路结构确定整个系统的运行状态,如各母线上的电压(幅值及相角)、网络中的功率分布以及功率损耗等。电力系统潮流计算的结果是电力系统稳定计算和故障分析的基础。 算法实验报告 学院:xxx 班级:xxx 学号:xxx 姓名:xxx prim 篇二:prim最小生成树算法实验报告 算法分析与设计之prim 学院:软件学院 学号:201421031059 姓名:吕吕 一、问题描述 1.prim的定义 prim算法是贪心算法的一个实例,用于找出一个有权重连通图中的最小生成树,即:具有最小权重且连接到所有结点的树。(强调的是树,树是没有回路的)。2.实验目的 选择一门编程语言,根据prim算法实现最小生成树,并打印最小生成树权值。 二、算法分析与设计 1.prim算法的实现过程 基本思想:假设g=(v,e)是连通的,te是g上最小生成树中边的集合。算法从u={u0}(u0∈v)、te={}开始。重复执行下列操作: 在所有u∈u,v∈v-u的边(u,v)∈e中找一条权值最小的边(u0,v0)并入集合te中,同时v0并入u,直到v=u为止。 此时,te中必有n-1条边,t=(v,te)为g的最小生成树。prim算法的核心:始终保持te中的边集构成一棵生成树。2.时间复杂度 prim算法适合稠密图,其时间复杂度为o(n^2),其时间复杂度与边得数目无关,n为顶点数,而看ruskal算法的时间复杂度为o(eloge)跟边的数目有关,适合稀疏图。 三、数据结构的设计 图采用类存储,定义如下: class graph { private: int *verticeslist;int **edge;int numvertices;int numedges;int maxvertices;graph();~graph();bool insertvertex(const int vertex);bool insertedge(int v1,int v2,int cost);int getvertexpos(int vertex);int getvalue(int i);int getweight(int v1,int v2);int numberofvertices();1 public: } void prim();其中,图中结点连接情况及权值使用二重指针表示,即二维数组实现邻接矩阵。 四、代码与运行结果 代码运行结果: 源码: //普雷姆算法 #include int graph::getvalue(int i){ };int graph::getweight(int v1,int v2){ };int graph::numberofvertices(){ };int graph::numberofedges(){ };//插入结点 bool graph::insertvertex(const int vertex){ };//插入边,v1和v2为结点在数组的下标 bool graph::insertedge(int v1,int v2,int cost){ if(v1>-1&&v1 istream& operator>>(istream &in ,graph &g){ };//输出图对象 ostream& operator<<(ostream &out,graph &g){ int i,j,vertices,edges;int start,end,weight;vertices=g.numberofvertices();edges=g.numberofedges();out< in>>vertices>>edges;for(i=1;i<=vertices;i++){ } i=0;while(i 黄冈师范学院 提高型实验报告 实验课题 最小生成树的prim算法 (实验类型:□综合性 ■设计性 □应用性) 实验课程 算法程序设计 实验时间2010年12月24日 学生姓名 周 媛鑫 专业班级 计科 0801 学 号 200826140110 一.实验目的和要求 (1)根据算法设计需要, 掌握连通网的灵活表示方法;(2)掌握最小生成树的prim算法;(3)熟练掌握贪心算法的设计方法;二.实验条件 (1)硬件环境:实验室电脑一台(2)软件环境:wintc 三.实验原理分析 (1)最小生成树的定义: 假设一个单位要在n个办公地点之间建立通信网,则连通n个地点只需要n-1条线路。可以用连通的无向网来表示n个地点以及它们之间可能设置的通信线路,其中网的顶点表示城市,边表示两地间的线路,赋于边的权值表示相应的代价。对于n个顶点的连通网可以建立许多不同的生成树,每一棵生成树都可以表示一个通信网。其中一棵使总的耗费最少,即边的权值之和最小的生成树,称为最小生成树。 (2)构造最小生成树可以用多种算法。其中多数算法利用了最小生成树的下面一种简称为mst的性质:假设n=(v,{e})是一个连通网,u是顶点集v的一个非空子集。若(u,v)是一条具有最小权值(代价)的边,其中u∈u,v∈v-u,则必存在一棵包含边(u.v)的最小生成树。(3)普里姆(prim)算法即是利用mst性质构造最小生成树的算法。算法思想如下: 假设n=(v,{e})和是连通网,te是n上最小生成树中边的集合。算法从u={u0}(u0∈v),te={}开始,重复执行下述操作:在所有u∈u,v∈v-u的边(u, v)∈e中找一条代价最小的边(u0, v0)并入集合te,同时v0并入u,直到u=v为止。此时te中必有n-1条边,则t=(v,{te})为n的最小生成树。四.实验步骤 (1)数据结构的设计 : 采用邻接矩阵的存储结构来存储无向带权图更利于实现及操作: 邻接矩阵的抽象数据结构定义: #defineinfinityint_max //最大值 #define max_ertex_num20 //最大顶点数 typedef enum {dg,dn,udg,udn}graphkind;//{有向图,有向网,无向网,无向图} typedef struct arc cell{ vrtype adj;// vrtype 是顶点关系的类型。对无权图用1和0表示相邻否; infotype * info;//该弧相关信息的指针 }arccell,adjmatrix [ max_vertex_num][max_vertex_num]; typedef struct { vertextype vexs [ max_vertex_num];//顶点向量adjmatrixarcs;// 邻接矩阵 intvexnum , arcnum;//图的当前顶点数和弧数 graphkindkind;// 图的种类标志 }mgraph;(2)函数设计 函数名称 函数原型 功能描述 main()int main(void)系统调用主函数 huiru()void huitu()绘制无向图 graphicver()void graphicver(graph *g)输出邻接矩阵 prim()void prim(graph *g)prim算法演示(3)实验源代码 实验报告书 课程名:《 操作系统原理A 》 题 目: 虚拟存储器管理 页面置换算法模拟实验 班 级: 学 号: 姓 名: 评语: 成绩: 指导教师: 批阅时间: ****年**月**日 一、实验目的与要求 1.目的: 请求页式虚存管理是常用的虚拟存储管理方案之一。通过请求页式虚存管理中对页面置换算法的模拟,有助于理解虚拟存储技术的特点,并加深对请求页式虚存管理的页面调度算法的理解。 2.要求: 本实验要求使用C语言编程模拟一个拥有若干个虚页的进程在给定的若干个实页中运行、并在缺页中断发生时分别使用FIFO和LRU算法进行页面置换的情形。其中虚页的个数可以事先给定(例如10个),对这些虚页访问的页地址流(其长度可以事先给定,例如20次虚页访问)可以由程序随机产生,也可以事先保存在文件中。要求程序运行时屏幕能显示出置换过程中的状态信息并输出访问结束时的页面命中率。程序应允许通过为该进程分配不同的实页数,来比较两种置换算法的稳定性。 二、实验说明 1.设计中虚页和实页的表示 本设计利用C语言的结构体来描述虚页和实页的结构。 pn pfn time pn pfn next 虚页结构 实页结构 在虚页结构中,pn代表虚页号,因为共10个虚页,所以pn的取值范围是0—9。pfn代表实页号,当一虚页未装入实页时,此项值为-1;当该虚页已装入某一实页时,此项值为所装入的实页的实页号pfn。time项在FIFO算法中不使用,在LRU中用来存放对该虚页的最近访问时间。 在实页结构中中,pn代表虚页号,表示pn所代表的虚页目前正放在此实页中。pfn代表实页号,取值范围(0—n-1)由动态指派的实页数n所决定。next是一个指向实页结构体的指针,用于多个实页以链表形式组织起来,关于实页链表的组织详见下面第4点。 2.关于缺页次数的统计 为计算命中率,需要统计在20次的虚页访问中命中的次数。为此,程序应设置一个计数器count,来统计虚页命中发生的次数。每当所访问的虚页的pfn项值不为-1,表示此虚页已被装入某实页内,此虚页被命中,count加1。最终命中率=count/20*100%。 3.LRU算法中“最近最久未用”页面的确定 为了能找到“最近最久未用”的虚页面,程序中可引入一个时间计数器countime,每当要访问一个虚页面时,countime的值加1,然后将所要访问的虚页的time项值设置为增值后的当前countime值,表示该虚页的最后一次被访问时间。当LRU算法需要置换时,从所有已分配实页的虚页中找出time值为最小的虚页就是“最近最久未用”的虚页面,应该将它置换出去。 4.算法中实页的组织 因为能分配的实页数n是在程序运行时由用户动态指派的,所以应使用链表组织动态产生的多个实页。为了调度算法实现的方便,可以考虑引入free和busy两个链表:free链表用于组织未分配出去的实页,首指针为free_head,初始时n个实页都处于free链表中;busy链表用于组织已分配出去的实页,首指针为busy_head,尾指针为busy_tail,初始值都为null。当所要访问的一个虚页不在实页中时,将产生缺页中断。此时若free链表不为空,就取下链表首指针所指的实页,并分配给该虚页。若free链表为空,则说明n个实页已全部分配出去,此时应进行页面置换:对于FIFO算法要将busy_head 所指的实页从busy链表中取下,分配给该虚页,然后再将该实页插入到busy链表尾部;对于LRU算法则要从所有已分配实页的虚页中找出time值为最小的虚页,将该虚页从装载它的那个实页中置换出去,并在该实页中装入当前正要访问的虚页。 三、程序流程图 四、主要程序清单 #include #include /*全局变量*/ int mSIZE; /*物理块数*/ int pSIZE; /*页面号引用串个数*/ static int memery[10]={0}; /*物理块中的页号*/ static int page[100]={0}; /*页面号引用串*/ static int temp[100][10]={0}; /*辅助数组*/ /*置换算法函数*/ void FIFO(); void LRU(); void OPT(); /*辅助函数*/ void print(unsigned int t); void designBy(); void download(); void mDelay(unsigned int Delay); /*主函数*/ void main() { int i,k,code; printf(“请输入物理块的个数(M<=10):“); scanf(“%d“,&mSIZE); printf(“请输入页面号引用串的个数(P<=100):“); scanf(“%d“,&pSIZE); puts(“请依次输入页面号引用串(连续输入,无需隔开):“); for(i=0;i scanf(“%1d“,&page[i]); download(); do { puts(“输入的页面号引用串为:“); for(k=0;k<=(pSIZE-1)/20;k++) { for(i=20*k;(i { if(((i+1)%20==0)||(((i+1)%20)&&(i==pSIZE-1))) printf(“%d\n“,page[i]); else printf(“%d “,page[i]); } } printf(“* * * * * * * * * * * * * * * * * * * * * * *\n“); printf(“* 请选择页面置换算法:\t\t\t *\n“); printf(“* -----------------------------------------*\n“); printf(“* 1.先进先出(FIFO) 2.最近最久未使用(LRU) *\n“); printf(“* 3.退出 *\n“); printf(“* * * * * * * * * * * * * * * * * * * * * * *\n“); printf(“请选择操作:[ ]\b\b“); scanf(“%d“,&code); switch(code) { case 1: FIFO(); break; case 2: LRU(); break; case 3: OPT(); break; case 4: system(“cls“); //system(“color 0A“); exit(0); default: printf(“输入错误,请重新输入:“); } printf(“按任意键重新选择置换算法:>>>“); getchar(); } while (code!=4); getchar(); } /*载入数据*/ void download() { printf(“\nFinish.\n载入成功!“); } /*设置延迟*/ void mDelay(unsigned int Delay) { unsigned int i; for(;Delay>0;Delay--) { for(i=0;i<124;i++) { printf(“ \b“); } } } /*显示设计者信息*/ void print(unsigned int t) { int i,j,k,l; int flag; for(k=0;k<=(pSIZE-1)/20;k++) { for(i=20*k;(i { if(((i+1)%20==0)||(((i+1)%20)&&(i==pSIZE-1))) printf(“%d\n“,page[i]); else printf(“%d “,page[i]); } for(j=0;j { for(i=20*k;(i if(i>=j) printf(“ |%d|“,temp[i][j]); else printf(“ | |“); } for(i=mSIZE+20*k;(i { for(flag=0,l=0;l if(temp[i][l]==temp[i-1][l]) flag++; if(flag==mSIZE)/*页面在物理块中*/ printf(“ “); else printf(“ |%d|“,temp[i][j]); } /*每行显示20个*/ if(i%20==0) continue; printf(“\n“); } } printf(“----------------------------------------\n“); printf(“缺页次数:%d\t\t“,t+mSIZE); printf(“缺页率:%d/%d\n“,t+mSIZE,pSIZE); printf(“置换次数:%d\t\t“,t); printf(“访问命中率:%d%%\n“,(pSIZE-(t+mSIZE))*100/pSIZE); printf(“----------------------------------------\n“); } /*计算过程延迟*/ void compute() { int i; printf(“正在进行相关计算,请稍候“); for(i=0;i++<30;printf(“\b“)); for(i=0;i++<30;printf(“ “)); for(i=0;i++<30;printf(“\b“)); } /*先进先出页面置换算法*/ void FIFO() { int memery[10]={0}; int time[10]={0}; /*记录进入物理块的时间*/ int i,j,k,m; int max=0; /*记录换出页*/ int count=0; /*记录置换次数*/ /*前mSIZE个数直接放入*/ for(i=0;i { memery[i]=page[i]; time[i]=i; for(j=0;j temp[i][j]=memery[j]; } for(i=mSIZE;i { /*判断新页面号是否在物理块中*/ for(j=0,k=0;j { if(memery[j]!=page[i]) k++; } if(k==mSIZE) /*如果不在物理块中*/ { count++; /*计算换出页*/ max=time[0]操作系统银行家算法实验报告 篇2
基于实验报告自动批阅的系统分析 篇3
操作系统银行家算法实验报告 篇4
PRIM算法实验报告 篇5
操作系统银行家算法实验报告 篇6