基于智能规划和矩阵运算法的课程管理系统设计

基于智能规划和矩阵运算法的课程管理系统设计
摘要:课程管理系统中设计了一个矩阵运算系统,该矩阵运算系统具有普通矩阵相加、相减、相乘及稀疏矩阵转置等功能。运算系统以Microsoft Visual C++ 6.0 作为系统开发工具,采用算数表达式处理算法来实现矩阵的加、减、乘等混合运算和稀疏矩阵的转置矩阵运算。系统操作简单、界面清晰,便于用户使用。
关键词:普通矩阵;运算;VC6.0
1排课基础理论
课表是对教学的活动内容进行科学合理的安排。例如,计算机专业的课程就要安排理论课程、上机课程等,科学合理地对其课程进行安排非常重要。因此,高校排课是一项非常复杂而艰巨的任务。
本模块分为教室管理、排课任务管理、手工排课、智能排课、调停课管理等功能,本文将重点讨论手工排课与智能排课两大功能。
1.1手工排课
本系统提供了友好、直观的排课界面。管理人员在该界面中能够查询到班级课表、班级空时间、课程相
关联的班级和教师等信息,而且系统提供了班级空时间查功能,在排某门课程时系统能自动计算出排改课程的空余时间,方便了排课人员安排课程。
1.2智能规划与矩阵运算的智能排课
课程管理系统设计了一个矩阵运算系统,该矩阵运算系统具有普通矩阵相加、相减、相乘及稀疏矩阵转置等功能。本运算系统以
Microsoft Visual C++ 6.0 作为系统开发工具,采用算数表达式处理算法来实现矩阵的加、减、乘等混合运算和稀疏矩阵的转置矩阵运算,系统操作简单、界面清晰,便于用户使用。
矩阵运算系统是一个非常重要的运算,很多软件开发公司都开发了该运算系统,现在我们采用C语言编写该运算系统。本系统使用智能规划和矩阵运算排课算法,该算法先对课程与时间进行规划,然后运用矩阵的运算,从而实现自动排课。对班级课表、班级空时间、课程相关联的班级和教师等信息,管理人员在这个界面都能够非常容易地查询到。
课程规划:主要是按照课程的重要性以及等级进行特殊安排,对手动进行排课设计,主要是分0~N个等级进行课程分类,安排数字的排列先后顺序进行合理规划(专业课程1>必修课程2>选修课程3)。
时间规划:高校上课时间段一般是2节或者3节,可以把一周时间按以上规则分成T块,并定义一个等
级(0~N),0是不能排课的时间段。
教室资源规划:教室合理安排要考虑教室成本及课程教学内容,按照等级高低进行教室合理安排,重点在于利用等级高的教室进行课程教学,根据等级高的先安排课程教学等。下面是智能排课的伪代码:For k=1 to KHN 'KHN课程数量按等级排列
kpk_jc = Ksj_to_jc(Ksj_kh(kh))'基于矩阵运算查空时间并转化为T块
pkcs = (skxs(jsz - qsz + 1))skzxs '计算一周排课次数
For j = 1 To pkcs
For i = 1 To TN 'TN时间T块的数量,按等级排列
If kpk_jc(i,5)= zxs Then '可排课的T块中有空时间
zc = kpk_jc(i,1)
skdd = Get_skdd '查询空教室,空教室按等级排列
If skdd <> "" Then
教室管理系统Write PKSJ '时间地点都具备,把数据写入数据库
kpk_jc(i,5)= -1 ' 该时间被排课了设置为-1
End If
End If
Next
Next
Next
课程管理系统设计中运用了矩阵的相加相乘以及稀疏矩阵的转置开发与实践,并利用C语言解决了一些我们常见问题。结果表明,该算法能高效、快速、优化地实现自动排课。
2设计理论分析方法
2.1算法一:矩阵转置
转置运算是一种最简单的矩阵运算,对于一个m*n的矩阵M,它的转置矩阵T是一个n*m的矩阵,且T(i,j)=M(j,i),1<=i<=n,1<=j<=m。
显然,一个稀疏矩阵的转置矩阵仍然是稀疏矩阵。①将矩阵的行
列值相互交换;②将每个三元组中的i和j相互调换;③重排三元组之间的次序便可实现矩阵的转置。一般矩阵转置算法为:for(col=1;col<=nu;++col)
for(row=1;row<=mu;++row)
T[col][row]=M[row][col];
按照a.data中三元组的次序进行转置,并将转置后的三元组置入b中恰当的位置。在此,需要附设num和cpot两个向量。Num[col]表示矩阵M中第col列中非零元的个数,cpot[col]表示M中第col列的第一个非零元在b.data中的恰当位置。
cpot[1]=1
cpot[col]=cpot[col-1]+num[col-1] 2<=col<=a.nu
以上就是快速转置。
2.2算法二:矩阵加法
稀疏矩阵使用三元组存储,运算时只需考虑非零元的值即可。两个矩阵相加:
首先必须保证M.mu=N.mu&&M.nu=N.nu,即同行同列的矩阵才能相加。
for(k=1;k<=M.tu;k++)
for(i=1;i<=N.tu;i++)
if(M.data[k].i == N.data[i].i &&M.data[k].j == N.data[i].j)
Q.data[count].e = M.data[k].e + N.data[i].e;
flag[i] = true;
如果非零元位置一样就直接相加:
if(i>N.tu)
Q.data[count].e = M.data[k].e;
如果没有到与M非零元位置一样的元素就直接把M中的非零元赋值给矩阵Q:
for(k=1;k<=N.tu;k++)
if(!flag[k])
Q.data[count].e = N.data[k].e;
如果没有查N中的元素,则直接把N中的非零元赋值给矩阵Q。
2.3算法三:矩阵乘法
矩阵乘法采用“带行链接信息”的三元组存储。经典算法如下:for(i=1;i<=m1;++i)
for(j=1;j<=n2;++j)
{Q[i][j]=0;
for(k=1;k<=n1;++k)
Q[i][j]+=M[j][k]*N[k][j];
}
稀疏矩阵相乘前提:M.nu=N.mu,大致步骤描述如下:
Q初始化;
If(Q是非零矩阵)
{//逐行求积

本文发布于:2024-09-22 01:43:31,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/357661.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:矩阵   课程   排课
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议