/*
* 个体
* @冯杰
* 2020/8/19
*
* */
package com.ScitLiugTeam.Realize_auto;
import com.ScitLiugTeam.auto_scheduling.*;
import com.conpara.ConPara;
import java.io.IOException;
import java.util.*;
public class RealizeIndividual implements Individual {
private double fitness=0;//个体适应度
private double score=0; //分数初始为0
private Bits bits=new RealizeBits();//二进制编码
//随机初始化
//赋值适应度
public void setFitness(double fitness) {
}
//获取适应度
public double getFitness() {
return fitness;
}
public Bits getBits() {
return bits;
}
@Override
public void randInitialize() {
String str="";
try {
str=Coding.Total();
} catch (IOException e) {
System.out.println("编码错误!");
e.printStackTrace();
}
bits.newBits(str.length());
bits.fromString(str);
score();
str=null;
}
//复制另外一个个体
@Override
public void copyFrom(Individual ind) {
bits.fromString(TurnBitsAndString.getStringToArresByte(ind.getBits().getM_bits()));
}
//判断本基因组代表的解是否合法,合法返回true,不合法false
@Override
public boolean isLegal() {
return false;
}
//本基因组的长度
@Override
public int length() {
return bits.length();
}
//将本基因组解码为问题的解
@Override
public Solution decode() {
return null;
}
//给始本基因组打分。这是初的打分
@Override
public void score() {
score=0;
int being = 0;
int end = ConPara.CLASSES_NUMBIT;
Vector<Integer> tmp=new Vector<>();
List<StudentClaass> studentClaassList = ConPara.RES.getStudentClaassList();
Map<StudentClaass, List<Course>> studentClaassListMap = ConPara.RES.getStudentClaassListMap();
Map<Course, List<Classroom>> courseRoomListMap = ConPara.RES.getCourseListclassroomMap();
Map<Course, List<Teacher>> courseTeacherListMap = ConPara.RES.getCourseListteachertMap();
int classes;//班级
int course;//课程
int teachsr;//老师
int Tow = 0;//单双周
int Week = 0;//星期
int DayTime = 0;//一天的时段
int Room;//教室
int x=1;
int y=1;
for (int num=end; num<=bits.length() ;being+=ConPara.ROOM_NUMBIT,end+=ConPara.CLASSES_NUMBIT, num=end) {
classes=bits.getValue(being, end);
if(classes>=studentClaassList.size()){
score=0;
System.out.println("班级越界!");
return;
}
StudentClaass studentClaass=studentClaassList.get(classes);
List<Course> courseLists=studentClaassListMap.get(studentClaass);
//课程
for (int i = 0; i < courseLists.size(); i++) {
if(i==0) {
//一个课程时段
being+=ConPara.CLASSES_NUMBIT;
end+=ConPara.COURSE_NUMBIT;
}else{
//第二次是从教室后开始加
being+=ConPara.ROOM_NUMBIT;
end+=ConPara.COURSE_NUMBIT;
}
course=bits.getValue(being, end);
//课程越界
if(course>=courseLists.size()){
//越界,直接分数位0
score=0;
// System.out.println("课程越界!");
return;
}
//课程
Course course1=courseLists.get(course);
//老师集合
List<Teacher> teacherList=courseTeacherListMap.get(course1);
//教室集合
List<Classroom> classroomList=courseRoomListMap.get(course1);
being+=ConPara.COURSE_NUMBIT;
end+=ConPara.TEACHER_NUMBIT;
teachsr=bits.getValue(being, end);
//老师越界
if(teachsr>=teacherList.size()){
//越界,直接分数位0
score=0;
// System.out.println("老师越界!");
return;
}
//全部课在一天;
//老师
Teacher teacher=teacherList.get(teachsr);
int Tmp=0;
for (int i1 = 1; i1 < tmp.size(); i1++) {
// System.out.println(teacher.getTeacherTend().getTend()+"-->>"+tmp.get(i1));
if((teacher.getTeacherTend().getTend().contains("分散")&&tmp.get(i1)<=2)||teacher.getTeacherTend().getTend().contains("集中")&&tmp.get(i1)>=3){
// System.out.println("score=0.01*score");
score=score-x*0.1;
x++;
} else{
// System.out.println("score+0.01");
if(tmp.get(i1)==0) {
score=score-0.01;
}else{
score=score+0.01;
}
}
}
tmp.clear();
//周学时
for (int i1 = 0; i1 < course1.getWeekClassHours(); i1++) {
if(i1==0) {
//一个课时段
being+=ConPara.TEACHER_NUMBIT;
end+=ConPara.TWOORONE_BUMBIT;
}else{
//第二次是从教室后开始加
being+=ConPara.ROOM_NUMBIT;
end+=ConPara.TWOORONE_BUMBIT;
}
//单双周
Tow=bits.getNp(being);
being+=ConPara.TWOORONE_BUMBIT;
end+=ConPara.WEEK_NUMBIT;
//星期
for (int j = being,a=1; j <end ;a++, j++) {
if(bits.getNp(j)==1){
Week=a;
}
}
//时段
being+=ConPara.WEEK_NUMBIT;
end+=ConPara.TIMEDAY_NUMBIT;
for (int j = being,a=1; j <end ;a++, j++) {
if(bits.getNp(j)==1){
DayTime=a;
}
}
for (Teacher.SkipHours m_stSkipHour : teacher.getM_stSkipHours()) {
// System.out.println(m_stSkipHour.getPhours().toString()+"-->>"+Week+"-->>"+DayTime);
if((m_stSkipHour.getPhours().contains("周一")&&Week==1)||(m_stSkipHour.getPhours().contains("周二")&&Week==2)||(m_stSkipHour.getPhours().contains("周三")&&Week==3)||(m_stSkipHour.getPhours().contains("周四")&&Week==4)||(m_stSkipHour.getPhours().contains("周五")&&Week==5)||(m_stSkipHour.getPhours().contains("周六")&&Week==6)||(m_stSkipHour.getPhours().contains("晚上")&&DayTime==5)){
// System.out.println("score==0");
score=score-y*0.1;
y++;
}else{
// System.out.println("score-0.01");
score=score+0.01;
}
}
//教室
being+=ConPara.TIMEDAY_NUMBIT;
end+=ConPara.ROOM_NUMBIT;
Room=bits.getValue(being, end);
if(Room>=classroomList.size()){
//越界,直接分数位0
score=0;
System.out.println("教室越界!");
return;
}
Classroom classroom=classroomList.get(Room);
score+=0.02;
Tmp=Week-Tmp;
tmp.add(Math.abs(Tmp));
Tmp=Week;
}
}
}
}
//给本基因组设置得分。这是根据种群个体整体情况
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【资源说明】 Java基于遗传算法的自动排课系统源码.zip 1、该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能。 Java基于遗传算法的自动排课系统源码.zipJava基于遗传算法的自动排课系统源码.zipJava基于遗传算法的自动排课系统源码.zipJava基于遗传算法的自动排课系统源码.zipJava基于遗传算法的自动排课系统源码.zipJava基于遗传算法的自动排课系统源码.zipJava基于遗传算法的自动排课系统源码.zipJava基于遗传算法的自动排课系统源码.zipJava基于遗传算法的自动排课系统源码.zipJava基于遗传算法的自动排课系统源码.zip
资源推荐
资源详情
资源评论
收起资源包目录
Java基于遗传算法的自动排课系统源码.zip (82个子文件)
lib
javacsv.jar 13KB
sqlite-jdbc-3.30.1.jar 5.81MB
src
.idea
dbnavigator.xml 22KB
vcs.xml 189B
misc.xml 256B
modules.xml 371B
src.iml 336B
.gitignore 47B
encodings.xml 924B
auto_scheduling.iml 419B
com
conpara
Resource.java 4KB
ConPara.java 4KB
ScitLiugTeam
Realize_auto
getList2.java 2KB
RealizePopulation.java 5KB
Fitness.java 2KB
RealizeBits.java 4KB
Decode.java 5KB
RealizeIndividual.java 8KB
TurnBitsAndString.java 3KB
getLsit.java 4KB
Coding.java 6KB
mainTem.java 851B
auto_scheduling
Classroom.java 2KB
Bits.java 2KB
Teacher.java 3KB
StudentClaass.java 1KB
CourseBase.java 819B
Individual.java 955B
Population.java 718B
Course.java 2KB
Solution.java 125B
multithreaded
Tmpmain.java 127B
MyThread.java 2KB
iostream
Imp
TeacherImports.java 8KB
ClassRoomImport.java 4KB
StudentClassImport.java 2KB
CourseImport.java 5KB
CourseBaseImport.java 4KB
csv
isTreamData.java 2KB
ImportCourseBase.java 473B
getStudent.java 865B
Database.java 8KB
ClassesRoom.java 480B
osTreamData.java 2KB
ImporTeacher.java 541B
ImportCourse.java 456B
ImportAppendTeacher.java 490B
ImpStudentClass.java 475B
data
学生10.csv 9KB
专业名称.csv 2KB
shujuk.db 236KB
多线程示例.java 3KB
课程3000.csv 40KB
选修班级10.csv 5KB
teacher.csv 87KB
学生名单.csv 6.15MB
shujik.db 16KB
老师000.csv 7KB
student.csv 276KB
教室资源.csv 78KB
班级名单10000.csv 163KB
老师111.csv 288KB
教室10.csv 72KB
附加要求2.csv 1KB
附加要求10.csv 138KB
课程1000.csv 37KB
大类课程10.csv 1KB
课程2000.csv 39KB
.idea
shelf
Default_Changelist1.xml 243B
Default_Changelist1
shelved.patch 329B
Default_Changelist.xml 241B
Default_Changelist
shelved.patch 592B
dbnavigator.xml 22KB
vcs.xml 238B
workspace.xml 24KB
misc.xml 260B
compiler.xml 188B
modules.xml 270B
encodings.xml 1007B
auto_scheduling.iml 928B
.project 374B
.gitignore 6B
共 82 条
- 1
资源评论
- 愚者2682024-03-25资源内容详细全面,与描述一致,对我很有用,有一定的使用价值。
- Assend2024-03-09超赞的资源,感谢资源主分享,大家一起进步!
- 123scales2023-10-14资源值得借鉴的内容很多,那就浅学一下吧,值得下载!Make程序设计2024-03-02嗯嗯,欢迎使用~
- m0_730679432023-10-09资源内容总结的很到位,内容详实,很受用,学到了~Make程序设计2024-03-02欢迎交流学习~
Make程序设计
- 粉丝: 5623
- 资源: 3567
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功