/*
* 个体
* @冯杰
* 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;
}
}
}
}
//给本基因组设置得分。这是根据种群个体整体情况
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【项目资源】: 包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。 包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。
资源推荐
资源详情
资源评论
收起资源包目录
基于遗传算法的自动排课系统.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
资源评论
妄北y
- 粉丝: 1w+
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 数据库课程设计-仓库管理系统中文最新版本
- 技术资料分享TF卡资料很好的技术资料.zip
- 技术资料分享TF介绍很好的技术资料.zip
- 10、安徽省大学生学科和技能竞赛A、B类项目列表(2019年版).xlsx
- 9、教育主管部门公布学科竞赛(2015版)-方喻飞
- C语言-leetcode题解之83-remove-duplicates-from-sorted-list.c
- C语言-leetcode题解之79-word-search.c
- C语言-leetcode题解之78-subsets.c
- C语言-leetcode题解之75-sort-colors.c
- C语言-leetcode题解之74-search-a-2d-matrix.c
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功