[jboss-svn-commits] JBL Code SVN: r17987 - in labs/jbossrules/trunk/drools-solver/drools-solver-examples: src/main/java/org/drools/solver/examples/itc2007/examination/domain and 4 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun Jan 20 12:21:46 EST 2008
Author: ge0ffrey
Date: 2008-01-20 12:21:41 -0500 (Sun, 20 Jan 2008)
New Revision: 17987
Added:
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/ExamCoincidence.java
Modified:
labs/jbossrules/trunk/drools-solver/drools-solver-examples/data/itc2007/examination/unsolved/exam_comp_set3.xml
labs/jbossrules/trunk/drools-solver/drools-solver-examples/data/itc2007/examination/unsolved/exam_comp_set6.xml
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Exam.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Student.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Topic.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/TopicConflict.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/persistence/ExaminationInputConvertor.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/ExaminationMoveFactory.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/JumpingNeighbourExaminationMoveFactory.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/NeighbourExaminationMoveFactory.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/solution/initializer/ExaminationStartingSolutionInitializer.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationSolverBenchmarkConfig.xml
Log:
working with coincidences: initializing etc
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/data/itc2007/examination/unsolved/exam_comp_set3.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/data/itc2007/examination/unsolved/exam_comp_set3.xml 2008-01-20 16:17:57 UTC (rev 17986)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/data/itc2007/examination/unsolved/exam_comp_set3.xml 2008-01-20 17:21:41 UTC (rev 17987)
@@ -118244,224 +118244,212 @@
<rightSideTopic reference="17712"/>
</org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
<org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18472">
- <id>146</id>
- <periodHardConstraintType reference="18326"/>
- <leftSideTopic reference="17742"/>
- <rightSideTopic reference="17742"/>
- </org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18473">
<id>147</id>
<periodHardConstraintType reference="18326"/>
<leftSideTopic reference="17754"/>
<rightSideTopic reference="17770"/>
</org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18474">
+ <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18473">
<id>148</id>
<periodHardConstraintType reference="18326"/>
<leftSideTopic reference="17770"/>
<rightSideTopic reference="17754"/>
</org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18475">
+ <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18474">
<id>149</id>
<periodHardConstraintType reference="18326"/>
<leftSideTopic reference="17796"/>
<rightSideTopic reference="17798"/>
</org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18476">
+ <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18475">
<id>150</id>
<periodHardConstraintType reference="18326"/>
<leftSideTopic reference="17798"/>
<rightSideTopic reference="17796"/>
</org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18477">
+ <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18476">
<id>151</id>
<periodHardConstraintType reference="18326"/>
<leftSideTopic reference="17800"/>
<rightSideTopic reference="17812"/>
</org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18478">
+ <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18477">
<id>152</id>
<periodHardConstraintType reference="18326"/>
<leftSideTopic reference="17802"/>
<rightSideTopic reference="17814"/>
</org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18479">
+ <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18478">
<id>153</id>
<periodHardConstraintType reference="18326"/>
<leftSideTopic reference="17806"/>
<rightSideTopic reference="17826"/>
</org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18480">
+ <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18479">
<id>154</id>
<periodHardConstraintType reference="18326"/>
<leftSideTopic reference="17808"/>
<rightSideTopic reference="17820"/>
</org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18481">
+ <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18480">
<id>155</id>
<periodHardConstraintType reference="18326"/>
<leftSideTopic reference="17810"/>
<rightSideTopic reference="17822"/>
</org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18482">
+ <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18481">
<id>156</id>
<periodHardConstraintType reference="18326"/>
<leftSideTopic reference="17812"/>
<rightSideTopic reference="17800"/>
</org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18483">
+ <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18482">
<id>157</id>
<periodHardConstraintType reference="18326"/>
<leftSideTopic reference="17814"/>
<rightSideTopic reference="17802"/>
</org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18484">
+ <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18483">
<id>158</id>
<periodHardConstraintType reference="18326"/>
<leftSideTopic reference="17820"/>
<rightSideTopic reference="17808"/>
</org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18485">
+ <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18484">
<id>159</id>
<periodHardConstraintType reference="18326"/>
<leftSideTopic reference="17822"/>
<rightSideTopic reference="17810"/>
</org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18486">
+ <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18485">
<id>160</id>
<periodHardConstraintType reference="18326"/>
<leftSideTopic reference="17826"/>
<rightSideTopic reference="17806"/>
</org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18487">
+ <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18486">
<id>161</id>
- <periodHardConstraintType id="18488">EXCLUSION</periodHardConstraintType>
+ <periodHardConstraintType id="18487">EXCLUSION</periodHardConstraintType>
<leftSideTopic reference="17966"/>
<rightSideTopic reference="17972"/>
</org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18489">
+ <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18488">
<id>162</id>
- <periodHardConstraintType reference="18488"/>
+ <periodHardConstraintType reference="18487"/>
<leftSideTopic reference="17972"/>
<rightSideTopic reference="17966"/>
</org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18490">
+ <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18489">
<id>163</id>
- <periodHardConstraintType id="18491">AFTER</periodHardConstraintType>
+ <periodHardConstraintType id="18490">AFTER</periodHardConstraintType>
<leftSideTopic reference="18004"/>
<rightSideTopic reference="18002"/>
</org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18492">
+ <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18491">
<id>164</id>
- <periodHardConstraintType reference="18491"/>
+ <periodHardConstraintType reference="18490"/>
<leftSideTopic reference="18004"/>
<rightSideTopic reference="18002"/>
</org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18493">
+ <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18492">
<id>165</id>
<periodHardConstraintType reference="18326"/>
<leftSideTopic reference="18014"/>
<rightSideTopic reference="18042"/>
</org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18494">
+ <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18493">
<id>166</id>
<periodHardConstraintType reference="18326"/>
<leftSideTopic reference="18042"/>
<rightSideTopic reference="18014"/>
</org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18495">
- <id>167</id>
- <periodHardConstraintType reference="18326"/>
- <leftSideTopic reference="18188"/>
- <rightSideTopic reference="18188"/>
- </org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18496">
+ <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18494">
<id>168</id>
<periodHardConstraintType reference="18326"/>
<leftSideTopic reference="18192"/>
<rightSideTopic reference="18194"/>
</org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18497">
+ <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="18495">
<id>169</id>
<periodHardConstraintType reference="18326"/>
<leftSideTopic reference="18194"/>
<rightSideTopic reference="18192"/>
</org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
</periodHardConstraintList>
- <roomHardConstraintList id="18498">
- <org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint id="18499">
+ <roomHardConstraintList id="18496">
+ <org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint id="18497">
<id>0</id>
- <roomHardConstraintType id="18500">ROOM_EXCLUSIVE</roomHardConstraintType>
+ <roomHardConstraintType id="18498">ROOM_EXCLUSIVE</roomHardConstraintType>
<topic reference="16414"/>
</org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint id="18501">
+ <org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint id="18499">
<id>1</id>
- <roomHardConstraintType reference="18500"/>
+ <roomHardConstraintType reference="18498"/>
<topic reference="17480"/>
</org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint id="18502">
+ <org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint id="18500">
<id>2</id>
- <roomHardConstraintType reference="18500"/>
+ <roomHardConstraintType reference="18498"/>
<topic reference="17552"/>
</org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint id="18503">
+ <org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint id="18501">
<id>3</id>
- <roomHardConstraintType reference="18500"/>
+ <roomHardConstraintType reference="18498"/>
<topic reference="18106"/>
</org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint id="18504">
+ <org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint id="18502">
<id>4</id>
- <roomHardConstraintType reference="18500"/>
+ <roomHardConstraintType reference="18498"/>
<topic reference="18108"/>
</org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint id="18505">
+ <org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint id="18503">
<id>5</id>
- <roomHardConstraintType reference="18500"/>
+ <roomHardConstraintType reference="18498"/>
<topic reference="18110"/>
</org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint id="18506">
+ <org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint id="18504">
<id>6</id>
- <roomHardConstraintType reference="18500"/>
+ <roomHardConstraintType reference="18498"/>
<topic reference="18116"/>
</org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint id="18507">
+ <org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint id="18505">
<id>7</id>
- <roomHardConstraintType reference="18500"/>
+ <roomHardConstraintType reference="18498"/>
<topic reference="18118"/>
</org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint id="18508">
+ <org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint id="18506">
<id>8</id>
- <roomHardConstraintType reference="18500"/>
+ <roomHardConstraintType reference="18498"/>
<topic reference="18120"/>
</org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint id="18509">
+ <org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint id="18507">
<id>9</id>
- <roomHardConstraintType reference="18500"/>
+ <roomHardConstraintType reference="18498"/>
<topic reference="18122"/>
</org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint id="18510">
+ <org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint id="18508">
<id>10</id>
- <roomHardConstraintType reference="18500"/>
+ <roomHardConstraintType reference="18498"/>
<topic reference="18124"/>
</org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint id="18511">
+ <org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint id="18509">
<id>11</id>
- <roomHardConstraintType reference="18500"/>
+ <roomHardConstraintType reference="18498"/>
<topic reference="18126"/>
</org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint id="18512">
+ <org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint id="18510">
<id>12</id>
- <roomHardConstraintType reference="18500"/>
+ <roomHardConstraintType reference="18498"/>
<topic reference="18128"/>
</org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint id="18513">
+ <org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint id="18511">
<id>13</id>
- <roomHardConstraintType reference="18500"/>
+ <roomHardConstraintType reference="18498"/>
<topic reference="18220"/>
</org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint id="18514">
+ <org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint id="18512">
<id>14</id>
- <roomHardConstraintType reference="18500"/>
+ <roomHardConstraintType reference="18498"/>
<topic reference="18222"/>
</org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint>
</roomHardConstraintList>
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/data/itc2007/examination/unsolved/exam_comp_set6.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/data/itc2007/examination/unsolved/exam_comp_set6.xml 2008-01-20 16:17:57 UTC (rev 17986)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/data/itc2007/examination/unsolved/exam_comp_set6.xml 2008-01-20 17:21:41 UTC (rev 17987)
@@ -44164,71 +44164,65 @@
<rightSideTopic reference="8216"/>
</org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
<org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="8438">
- <id>12</id>
- <periodHardConstraintType reference="8426"/>
- <leftSideTopic reference="8218"/>
- <rightSideTopic reference="8218"/>
- </org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="8439">
<id>13</id>
<periodHardConstraintType reference="8426"/>
<leftSideTopic reference="8222"/>
<rightSideTopic reference="8238"/>
</org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="8440">
+ <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="8439">
<id>14</id>
<periodHardConstraintType reference="8426"/>
<leftSideTopic reference="8240"/>
<rightSideTopic reference="8244"/>
</org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="8441">
+ <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="8440">
<id>15</id>
<periodHardConstraintType reference="8426"/>
<leftSideTopic reference="8246"/>
<rightSideTopic reference="8254"/>
</org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="8442">
+ <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="8441">
<id>16</id>
<periodHardConstraintType reference="8426"/>
<leftSideTopic reference="8260"/>
<rightSideTopic reference="8292"/>
</org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="8443">
+ <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="8442">
<id>17</id>
<periodHardConstraintType reference="8426"/>
<leftSideTopic reference="8272"/>
<rightSideTopic reference="8286"/>
</org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="8444">
+ <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="8443">
<id>18</id>
<periodHardConstraintType reference="8426"/>
<leftSideTopic reference="8294"/>
<rightSideTopic reference="8312"/>
</org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="8445">
+ <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="8444">
<id>19</id>
- <periodHardConstraintType id="8446">AFTER</periodHardConstraintType>
+ <periodHardConstraintType id="8445">AFTER</periodHardConstraintType>
<leftSideTopic reference="8216"/>
<rightSideTopic reference="7920"/>
</org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="8447">
+ <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="8446">
<id>20</id>
- <periodHardConstraintType reference="8446"/>
+ <periodHardConstraintType reference="8445"/>
<leftSideTopic reference="7980"/>
<rightSideTopic reference="7924"/>
</org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="8448">
+ <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="8447">
<id>21</id>
- <periodHardConstraintType id="8449">EXCLUSION</periodHardConstraintType>
+ <periodHardConstraintType id="8448">EXCLUSION</periodHardConstraintType>
<leftSideTopic reference="8160"/>
<rightSideTopic reference="8156"/>
</org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
- <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="8450">
+ <org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint id="8449">
<id>22</id>
- <periodHardConstraintType reference="8449"/>
+ <periodHardConstraintType reference="8448"/>
<leftSideTopic reference="8246"/>
<rightSideTopic reference="7950"/>
</org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint>
</periodHardConstraintList>
- <roomHardConstraintList id="8451"/>
+ <roomHardConstraintList id="8450"/>
</org.drools.solver.examples.itc2007.examination.domain.Examination>
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Exam.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Exam.java 2008-01-20 16:17:57 UTC (rev 17986)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Exam.java 2008-01-20 17:21:41 UTC (rev 17987)
@@ -12,6 +12,9 @@
private Topic topic;
+ private ExamCoincidence examCoincidence = null;
+
+ // Changed by moves, between score calculations.
private Period period;
private Room room;
@@ -23,6 +26,14 @@
this.topic = topic;
}
+ public ExamCoincidence getExamCoincidence() {
+ return examCoincidence;
+ }
+
+ public void setExamCoincidence(ExamCoincidence examCoincidence) {
+ this.examCoincidence = examCoincidence;
+ }
+
public Period getPeriod() {
return period;
}
@@ -39,6 +50,12 @@
this.room = room;
}
+ public boolean isCoincidenceLeader() {
+ return examCoincidence == null
+ || examCoincidence.getFirstExam() == this;
+ }
+
+
public int compareTo(Exam other) {
return new CompareToBuilder()
.append(period, other.period)
@@ -57,8 +74,8 @@
}
/**
- * The normal methods {@link #equals(Object)} and {@link #hashCode()} cannot be used
- * because the rule engine already requires them (for performance in their original state).
+ * The normal methods {@link #equals(Object)} and {@link #hashCode()} cannot be used because the rule engine already
+ * requires them (for performance in their original state).
* @see #solutionHashCode()
*/
public boolean solutionEquals(Object o) {
@@ -78,8 +95,8 @@
}
/**
- * The normal methods {@link #equals(Object)} and {@link #hashCode()} cannot be used
- * because the rule engine already requires them (for performance in their original state).
+ * The normal methods {@link #equals(Object)} and {@link #hashCode()} cannot be used because the rule engine already
+ * requires them (for performance in their original state).
* @see #solutionEquals(Object)
*/
public int solutionHashCode() {
Copied: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/ExamCoincidence.java (from rev 17981, labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/TopicConflict.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/ExamCoincidence.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/ExamCoincidence.java 2008-01-20 17:21:41 UTC (rev 17987)
@@ -0,0 +1,40 @@
+package org.drools.solver.examples.itc2007.examination.domain;
+
+import java.io.Serializable;
+import java.util.Set;
+
+/**
+ * Calculated during initialization, not used for score calculation, used for move creation.
+ * @author Geoffrey De Smet
+ */
+public class ExamCoincidence implements Serializable {
+
+ private Set<Exam> coincidenceExamSet;
+ private Exam firstExam;
+
+ public ExamCoincidence(Set<Exam> coincidenceExamSet) {
+ this.coincidenceExamSet = coincidenceExamSet;
+ for (Exam exam : coincidenceExamSet) {
+ if (firstExam == null || firstExam.getId() > exam.getId()) {
+ firstExam = exam;
+ }
+ }
+ }
+
+ public Set<Exam> getCoincidenceExamSet() {
+ return coincidenceExamSet;
+ }
+
+ public void setCoincidenceExamSet(Set<Exam> coincidenceExamSet) {
+ this.coincidenceExamSet = coincidenceExamSet;
+ }
+
+ public Exam getFirstExam() {
+ return firstExam;
+ }
+
+ public void setFirstExam(Exam firstExam) {
+ this.firstExam = firstExam;
+ }
+
+}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Student.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Student.java 2008-01-20 16:17:57 UTC (rev 17986)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Student.java 2008-01-20 17:21:41 UTC (rev 17987)
@@ -4,6 +4,7 @@
import org.drools.solver.examples.common.domain.AbstractPersistable;
/**
+ * Not used during score calculation, so not inserted into the working memory.
* @author Geoffrey De Smet
*/
public class Student extends AbstractPersistable implements Comparable<Student> {
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Topic.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Topic.java 2008-01-20 16:17:57 UTC (rev 17986)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Topic.java 2008-01-20 17:21:41 UTC (rev 17987)
@@ -1,6 +1,7 @@
package org.drools.solver.examples.itc2007.examination.domain;
import java.util.List;
+import java.util.Set;
import org.apache.commons.lang.builder.CompareToBuilder;
import org.drools.solver.examples.common.domain.AbstractPersistable;
@@ -12,7 +13,10 @@
private int duration;
private List<Student> studentList;
+
+ // Calculated during initialization, not modified during score calculation.
private boolean frontLoadLarge;
+ private Set<Topic> coincidenceTopicSet = null;
public int getDuration() {
return duration;
@@ -42,6 +46,19 @@
this.frontLoadLarge = frontLoadLarge;
}
+ public Set<Topic> getCoincidenceTopicSet() {
+ return coincidenceTopicSet;
+ }
+
+ public void setCoincidenceTopicSet(Set<Topic> coincidenceTopicSet) {
+ this.coincidenceTopicSet = coincidenceTopicSet;
+ }
+
+
+ public boolean hasCoincidenceTopic() {
+ return coincidenceTopicSet != null;
+ }
+
public int compareTo(Topic other) {
return new CompareToBuilder()
.append(id, other.id)
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/TopicConflict.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/TopicConflict.java 2008-01-20 16:17:57 UTC (rev 17986)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/TopicConflict.java 2008-01-20 17:21:41 UTC (rev 17987)
@@ -7,6 +7,7 @@
import org.apache.commons.lang.builder.HashCodeBuilder;
/**
+ * Calculated during initialization, not modified during score calculation.
* @author Geoffrey De Smet
*/
public class TopicConflict implements Serializable {
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/persistence/ExaminationInputConvertor.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/persistence/ExaminationInputConvertor.java 2008-01-20 16:17:57 UTC (rev 17986)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/persistence/ExaminationInputConvertor.java 2008-01-20 17:21:41 UTC (rev 17987)
@@ -217,14 +217,22 @@
if (lineTokens.length != 3) {
throw new IllegalArgumentException("Read line (" + line + ") is expected to contain 3 tokens.");
}
- periodHardConstraint.setLeftSideTopic(topicList.get(Integer.parseInt(lineTokens[0])));
- periodHardConstraint.setPeriodHardConstraintType(PeriodHardConstraintType.valueOf(lineTokens[1]));
- periodHardConstraint.setRightSideTopic(topicList.get(Integer.parseInt(lineTokens[2])));
- if (periodHardConstraint.getPeriodHardConstraintType() == PeriodHardConstraintType.EXAM_COINCIDENCE
- && !Collections.disjoint(periodHardConstraint.getLeftSideTopic().getStudentList(),
- periodHardConstraint.getRightSideTopic().getStudentList())) {
- logger.warn("Filtering out periodHardConstraint (" + periodHardConstraint
- + ") because the left and right topic share students.");
+ Topic leftTopic = topicList.get(Integer.parseInt(lineTokens[0]));
+ periodHardConstraint.setLeftSideTopic(leftTopic);
+ PeriodHardConstraintType periodHardConstraintType = PeriodHardConstraintType.valueOf(lineTokens[1]);
+ periodHardConstraint.setPeriodHardConstraintType(periodHardConstraintType);
+ Topic rightTopic = topicList.get(Integer.parseInt(lineTokens[2]));
+ periodHardConstraint.setRightSideTopic(rightTopic);
+ if (periodHardConstraintType == PeriodHardConstraintType.EXAM_COINCIDENCE) {
+ // It's not specified what happens
+ // when A coincidences with B and B coincidences with C
+ // and when A and C share students (but don't directly coincidence)
+ if (!Collections.disjoint(leftTopic.getStudentList(), rightTopic.getStudentList())) {
+ logger.warn("Filtering out periodHardConstraint (" + periodHardConstraint
+ + ") because the left and right topic share students.");
+ } else {
+ periodHardConstraintList.add(periodHardConstraint);
+ }
} else {
periodHardConstraintList.add(periodHardConstraint);
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/ExaminationMoveFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/ExaminationMoveFactory.java 2008-01-20 16:17:57 UTC (rev 17986)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/ExaminationMoveFactory.java 2008-01-20 17:21:41 UTC (rev 17987)
@@ -10,6 +10,7 @@
import org.drools.solver.examples.itc2007.examination.domain.Examination;
import org.drools.solver.examples.itc2007.examination.domain.Period;
import org.drools.solver.examples.itc2007.examination.domain.Room;
+import org.drools.solver.examples.itc2007.examination.solver.move.PeriodChangeBulkMove;
import org.drools.solver.examples.itc2007.examination.solver.move.PeriodChangeMove;
import org.drools.solver.examples.itc2007.examination.solver.move.RoomChangeMove;
@@ -20,12 +21,23 @@
public List<Move> createMoveList(Solution solution) {
Examination examination = (Examination) solution;
+ List<Period> periodList = examination.getPeriodList();
+ List<Room> roomList = examination.getRoomList();
List<Move> moveList = new ArrayList<Move>();
for (Exam exam : examination.getExamList()) {
- for (Period period : examination.getPeriodList()) {
- moveList.add(new PeriodChangeMove(exam, period));
+ if (exam.getExamCoincidence() != null) {
+ if (exam.isCoincidenceLeader()) {
+ for (Period period : periodList) {
+ moveList.add(new PeriodChangeBulkMove(
+ exam.getExamCoincidence().getCoincidenceExamSet(), period));
+ }
+ }
+ } else {
+ for (Period period : periodList) {
+ moveList.add(new PeriodChangeMove(exam, period));
+ }
}
- for (Room room : examination.getRoomList()) {
+ for (Room room : roomList) {
moveList.add(new RoomChangeMove(exam, room));
}
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/JumpingNeighbourExaminationMoveFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/JumpingNeighbourExaminationMoveFactory.java 2008-01-20 16:17:57 UTC (rev 17986)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/JumpingNeighbourExaminationMoveFactory.java 2008-01-20 17:21:41 UTC (rev 17987)
@@ -10,6 +10,7 @@
import org.drools.solver.examples.itc2007.examination.domain.Examination;
import org.drools.solver.examples.itc2007.examination.domain.Period;
import org.drools.solver.examples.itc2007.examination.domain.Room;
+import org.drools.solver.examples.itc2007.examination.solver.move.PeriodChangeBulkMove;
import org.drools.solver.examples.itc2007.examination.solver.move.PeriodChangeMove;
import org.drools.solver.examples.itc2007.examination.solver.move.RoomChangeMove;
@@ -22,17 +23,30 @@
private int roomJump = 1;
public Iterator<Move> iterator() {
- List<Move> moveList = new ArrayList<Move>();
Examination examination = (Examination) localSearchSolver.getCurrentSolution();
List<Period> periodList = examination.getPeriodList();
List<Room> roomList = examination.getRoomList();
+ List<Move> moveList = new ArrayList<Move>();
for (Exam exam : examination.getExamList()) {
- for (Period period : periodList) {
- int distance = calculateShortestDistance(
- period.getPeriodIndex(), exam.getPeriod().getPeriodIndex(), periodList.size());
- if (distance == periodJump) {
- moveList.add(new PeriodChangeMove(exam, period));
+ if (exam.getExamCoincidence() != null) {
+ if (exam.isCoincidenceLeader()) {
+ for (Period period : periodList) {
+ int distance = calculateShortestDistance(
+ period.getPeriodIndex(), exam.getPeriod().getPeriodIndex(), periodList.size());
+ if (distance == periodJump) {
+ moveList.add(new PeriodChangeBulkMove(
+ exam.getExamCoincidence().getCoincidenceExamSet(), period));
+ }
+ }
}
+ } else {
+ for (Period period : periodList) {
+ int distance = calculateShortestDistance(
+ period.getPeriodIndex(), exam.getPeriod().getPeriodIndex(), periodList.size());
+ if (distance == periodJump) {
+ moveList.add(new PeriodChangeMove(exam, period));
+ }
+ }
}
for (Room room : roomList) {
long distance = calculateShortestDistance(
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/NeighbourExaminationMoveFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/NeighbourExaminationMoveFactory.java 2008-01-20 16:17:57 UTC (rev 17986)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/NeighbourExaminationMoveFactory.java 2008-01-20 17:21:41 UTC (rev 17987)
@@ -10,6 +10,7 @@
import org.drools.solver.examples.itc2007.examination.domain.Examination;
import org.drools.solver.examples.itc2007.examination.domain.Period;
import org.drools.solver.examples.itc2007.examination.domain.Room;
+import org.drools.solver.examples.itc2007.examination.solver.move.PeriodChangeBulkMove;
import org.drools.solver.examples.itc2007.examination.solver.move.PeriodChangeMove;
import org.drools.solver.examples.itc2007.examination.solver.move.RoomChangeMove;
@@ -22,17 +23,30 @@
private static final int ROOM_JUMP = 2;
public Iterator<Move> iterator() {
- List<Move> moveList = new ArrayList<Move>();
Examination examination = (Examination) localSearchSolver.getCurrentSolution();
List<Period> periodList = examination.getPeriodList();
List<Room> roomList = examination.getRoomList();
+ List<Move> moveList = new ArrayList<Move>();
for (Exam exam : examination.getExamList()) {
- for (Period period : periodList) {
- int distance = calculateShortestDistance(
- period.getPeriodIndex(), exam.getPeriod().getPeriodIndex(), periodList.size());
- if (distance <= PERIOD_JUMP) {
- moveList.add(new PeriodChangeMove(exam, period));
+ if (exam.getExamCoincidence() != null) {
+ if (exam.isCoincidenceLeader()) {
+ for (Period period : periodList) {
+ int distance = calculateShortestDistance(
+ period.getPeriodIndex(), exam.getPeriod().getPeriodIndex(), periodList.size());
+ if (distance <= PERIOD_JUMP) {
+ moveList.add(new PeriodChangeBulkMove(
+ exam.getExamCoincidence().getCoincidenceExamSet(), period));
+ }
+ }
}
+ } else {
+ for (Period period : periodList) {
+ int distance = calculateShortestDistance(
+ period.getPeriodIndex(), exam.getPeriod().getPeriodIndex(), periodList.size());
+ if (distance <= PERIOD_JUMP) {
+ moveList.add(new PeriodChangeMove(exam, period));
+ }
+ }
}
for (Room room : roomList) {
long distance = calculateShortestDistance(
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/solution/initializer/ExaminationStartingSolutionInitializer.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/solution/initializer/ExaminationStartingSolutionInitializer.java 2008-01-20 16:17:57 UTC (rev 17986)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/solution/initializer/ExaminationStartingSolutionInitializer.java 2008-01-20 17:21:41 UTC (rev 17987)
@@ -2,8 +2,11 @@
import java.util.ArrayList;
import java.util.Collections;
-import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
import org.apache.commons.lang.builder.CompareToBuilder;
import org.drools.FactHandle;
@@ -12,6 +15,7 @@
import org.drools.solver.core.solution.initializer.AbstractStartingSolutionInitializer;
import org.drools.solver.examples.common.domain.PersistableIdComparator;
import org.drools.solver.examples.itc2007.examination.domain.Exam;
+import org.drools.solver.examples.itc2007.examination.domain.ExamCoincidence;
import org.drools.solver.examples.itc2007.examination.domain.Examination;
import org.drools.solver.examples.itc2007.examination.domain.Period;
import org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint;
@@ -33,126 +37,284 @@
private void initializeExamList(Examination examination) {
EvaluationHandler evaluationHandler = solver.getEvaluationHandler();
- List<Topic> topicList = examination.getTopicList();
List<Period> periodList = examination.getPeriodList();
List<Room> roomList = examination.getRoomList();
- List<Exam> examList = new ArrayList<Exam>(topicList.size());
+ List<Exam> examList = new ArrayList<Exam>(examination.getTopicList().size());
examination.setExamList(examList);
evaluationHandler.setSolution(examination);
StatefulSession statefulSession = evaluationHandler.getStatefulSession();
- List<Topic> assigningTopicList = createAssigningTopicList(examination);
+ List<ExamInitialWeight> examInitialWeightList = createExamAssigningScoreList(examination);
- for (Topic topic : assigningTopicList) {
+ for (ExamInitialWeight examInitialWeight : examInitialWeightList) {
double unscheduledScore = evaluationHandler.fireAllRulesAndCalculateStepScore();
+ Exam leader = examInitialWeight.getExam();
+ FactHandle leaderHandle = null;
- Exam exam = new Exam();
- exam.setId(topic.getId());
- exam.setTopic(topic);
- examList.add(exam);
- FactHandle examHandle = null;
-
+ List<ExamToHandle> examToHandleList = new ArrayList<ExamToHandle>(5);
+ if (leader.getExamCoincidence() == null) {
+ examToHandleList.add(new ExamToHandle(leader));
+ } else {
+ for (Exam coincidenceExam : leader.getExamCoincidence().getCoincidenceExamSet()) {
+ examToHandleList.add(new ExamToHandle(coincidenceExam));
+ }
+ }
+
List<PeriodScoring> periodScoringList = new ArrayList<PeriodScoring>(periodList.size());
-
for (Period period : periodList) {
- exam.setPeriod(period);
- if (examHandle == null) {
- // Score rules don't support a nullable exam.getPeriod()
- examHandle = statefulSession.insert(exam);
- } else {
- statefulSession.update(examHandle, exam);
+ for (ExamToHandle examToHandle : examToHandleList) {
+ examToHandle.getExam().setPeriod(period);
+ if (examToHandle.getExamHandle() == null) {
+ examToHandle.setExamHandle(statefulSession.insert(examToHandle.getExam()));
+ if (examToHandle.getExam().isCoincidenceLeader()) {
+ leaderHandle = examToHandle.getExamHandle();
+ }
+ } else {
+ statefulSession.update(examToHandle.getExamHandle(), examToHandle.getExam());
+ }
}
double score = evaluationHandler.fireAllRulesAndCalculateStepScore();
periodScoringList.add(new PeriodScoring(period, score));
}
Collections.sort(periodScoringList);
- boolean perfectMatch = false;
- double bestScore = Double.NEGATIVE_INFINITY;
- Period bestPeriod = null;
- Room bestRoom = null;
- for (PeriodScoring periodScoring : periodScoringList) {
- if (bestScore >= periodScoring.getScore()) {
- // No need to check the rest
- break;
+ scheduleLeader(periodScoringList, roomList, evaluationHandler, statefulSession, unscheduledScore,
+ examToHandleList, leader, leaderHandle);
+ examList.add(leader);
+
+ // Schedule the non leaders
+ for (ExamToHandle examToHandle : examToHandleList) {
+ Exam exam = examToHandle.getExam();
+ // Leader already has a room
+ if (!exam.isCoincidenceLeader()) {
+ scheduleNonLeader(roomList, evaluationHandler, statefulSession, exam, examToHandle.getExamHandle());
+ examList.add(exam);
}
- exam.setPeriod(periodScoring.getPeriod());
- for (Room room : roomList) {
- exam.setRoom(room);
- statefulSession.update(examHandle, exam);
- double score = evaluationHandler.fireAllRulesAndCalculateStepScore();
- if (score < unscheduledScore) {
- if (score > bestScore) {
- bestScore = score;
- bestPeriod = periodScoring.getPeriod();
- bestRoom = room;
- }
- } else if (score == unscheduledScore) {
- perfectMatch = true;
- break;
- } else {
- throw new IllegalStateException("The score (" + score
- + ") cannot be higher than unscheduledScore (" + unscheduledScore + ").");
+ }
+ }
+ Collections.sort(examList, new PersistableIdComparator());
+ examination.setExamList(examList);
+ }
+
+ private void scheduleLeader(List<PeriodScoring> periodScoringList, List<Room> roomList,
+ EvaluationHandler evaluationHandler, StatefulSession statefulSession, double unscheduledScore,
+ List<ExamToHandle> examToHandleList, Exam leader, FactHandle leaderHandle) {
+ boolean perfectMatch = false;
+ double bestScore = Double.NEGATIVE_INFINITY;
+ Period bestPeriod = null;
+ Room bestRoom = null;
+ for (PeriodScoring periodScoring : periodScoringList) {
+ if (bestScore >= periodScoring.getScore()) {
+ // No need to check the rest
+ break;
+ }
+ for (ExamToHandle examToHandle : examToHandleList) {
+ examToHandle.getExam().setPeriod(periodScoring.getPeriod());
+ statefulSession.update(examToHandle.getExamHandle(), examToHandle.getExam());
+ }
+ for (Room room : roomList) {
+ leader.setRoom(room);
+ statefulSession.update(leaderHandle, leader);
+ double score = evaluationHandler.fireAllRulesAndCalculateStepScore();
+ if (score < unscheduledScore) {
+ if (score > bestScore) {
+ bestScore = score;
+ bestPeriod = periodScoring.getPeriod();
+ bestRoom = room;
}
- }
- if (perfectMatch) {
+ } else if (score == unscheduledScore) {
+ perfectMatch = true;
break;
+ } else {
+ throw new IllegalStateException("The score (" + score
+ + ") cannot be higher than unscheduledScore (" + unscheduledScore + ").");
}
}
- if (!perfectMatch) {
- if (bestPeriod == null || bestRoom == null) {
- throw new IllegalStateException("The bestPeriod (" + bestPeriod + ") or the bestRoom ("
- + bestRoom + ") cannot be null.");
+ if (perfectMatch) {
+ break;
+ }
+ }
+ if (!perfectMatch) {
+ if (bestPeriod == null || bestRoom == null) {
+ throw new IllegalStateException("The bestPeriod (" + bestPeriod + ") or the bestRoom ("
+ + bestRoom + ") cannot be null.");
+ }
+ leader.setRoom(bestRoom);
+ for (ExamToHandle examToHandle : examToHandleList) {
+ examToHandle.getExam().setPeriod(bestPeriod);
+ statefulSession.update(examToHandle.getExamHandle(), examToHandle.getExam());
+ }
+ }
+ logger.debug(" Exam ({}) initialized for starting solution.", leader);
+ }
+
+ private void scheduleNonLeader(List<Room> roomList,
+ EvaluationHandler evaluationHandler, StatefulSession statefulSession,
+ Exam exam, FactHandle examHandle) {
+ if (exam.getRoom() != null) {
+ throw new IllegalStateException("Exam (" + exam + ") already has a room.");
+ }
+ double unscheduledScore = evaluationHandler.fireAllRulesAndCalculateStepScore();
+ boolean perfectMatch = false;
+ double bestScore = Double.NEGATIVE_INFINITY;
+ Room bestRoom = null;
+ for (Room room : roomList) {
+ exam.setRoom(room);
+ statefulSession.update(examHandle, exam);
+ double score = evaluationHandler.fireAllRulesAndCalculateStepScore();
+ if (score < unscheduledScore) {
+ if (score > bestScore) {
+ bestScore = score;
+ bestRoom = room;
}
- exam.setPeriod(bestPeriod);
- exam.setRoom(bestRoom);
- statefulSession.update(examHandle, exam);
+ } else if (score == unscheduledScore) {
+ perfectMatch = true;
+ break;
+ } else {
+ throw new IllegalStateException("The score (" + score
+ + ") cannot be higher than unscheduledScore (" + unscheduledScore + ").");
}
- logger.debug(" Exam ({}) initialized for starting solution.", exam);
}
- Collections.sort(examList, new PersistableIdComparator());
+ if (!perfectMatch) {
+ if (bestRoom == null) {
+ throw new IllegalStateException("The bestRoom ("
+ + bestRoom + ") cannot be null.");
+ }
+ exam.setRoom(bestRoom);
+ statefulSession.update(examHandle, exam);
+ }
+ logger.debug(" Exam ({}) initialized for starting solution. *", exam);
}
+ public static class ExamToHandle {
+
+ private Exam exam;
+ private FactHandle examHandle;
+
+ public ExamToHandle(Exam exam) {
+ this.exam = exam;
+ }
+
+ public Exam getExam() {
+ return exam;
+ }
+
+ public FactHandle getExamHandle() {
+ return examHandle;
+ }
+
+ public void setExamHandle(FactHandle examHandle) {
+ this.examHandle = examHandle;
+ }
+ }
+
/**
- * Order the topics in the order which we 'll assign them into periods and rooms.
+ * Create and order the exams in the order which we 'll assign them into periods and rooms.
* @param examination not null
* @return not null
*/
- private List<Topic> createAssigningTopicList(Examination examination) {
- List<Topic> assigningTopicList = new ArrayList<Topic>(examination.getTopicList());
- Collections.sort(assigningTopicList, new Comparator<Topic>() {
- public int compare(Topic a, Topic b) {
- return new CompareToBuilder()
- .append(b.getStudentListSize(), a.getStudentListSize()) // Descending
- .append(b.getDuration(), a.getDuration()) // Descending
- .append(a.getId(), b.getId()) // Ascending
- .toComparison();
+ private List<ExamInitialWeight> createExamAssigningScoreList(Examination examination) {
+ List<Exam> examList = createExamList(examination);
+ List<ExamInitialWeight> examInitialWeightList = new ArrayList<ExamInitialWeight>(examList.size());
+ for (Exam exam : examList) {
+ if (exam.isCoincidenceLeader()) {
+ examInitialWeightList.add(new ExamInitialWeight(exam));
}
- });
+ }
+ Collections.sort(examInitialWeightList);
for (PeriodHardConstraint periodHardConstraint : examination.getPeriodHardConstraintList()) {
- if (periodHardConstraint.getPeriodHardConstraintType() == PeriodHardConstraintType.EXAM_COINCIDENCE) {
- int leftSideIndex = assigningTopicList.indexOf(periodHardConstraint.getLeftSideTopic());
- int rightSideIndex = assigningTopicList.indexOf(periodHardConstraint.getRightSideTopic());
- int firstIndex = Math.min(leftSideIndex, rightSideIndex);
- int lastIndex = Math.max(leftSideIndex, rightSideIndex);
- if ((lastIndex - firstIndex) > 1) {
- // TODO lastIndex - firstIndex can be 2 with another COINCIDENCE in the middle of it
- Topic lastTopic = assigningTopicList.remove(lastIndex);
- assigningTopicList.add(firstIndex + 1, lastTopic);
+ if (periodHardConstraint.getPeriodHardConstraintType() == PeriodHardConstraintType.AFTER) {
+ int afterSideIndex = -1;
+ int beforeSideIndex = -1;
+ for (int i = 0; i < examInitialWeightList.size(); i++) {
+ Topic topic = examInitialWeightList.get(i).getExam().getTopic();
+ if (topic.equals(periodHardConstraint.getLeftSideTopic())) { // TODO FIXME topic could be in coinc.
+ afterSideIndex = i;
+ }
+ if (topic.equals(periodHardConstraint.getRightSideTopic())) { // TODO FIXME topic could be in coinc.
+ beforeSideIndex = i;
+ }
}
- } else if (periodHardConstraint.getPeriodHardConstraintType() == PeriodHardConstraintType.AFTER) {
- int afterSideIndex = assigningTopicList.indexOf(periodHardConstraint.getLeftSideTopic());
- int beforeSideIndex = assigningTopicList.indexOf(periodHardConstraint.getRightSideTopic());
if (afterSideIndex < beforeSideIndex) {
- Topic beforeTopic = assigningTopicList.remove(beforeSideIndex);
- assigningTopicList.add(afterSideIndex, beforeTopic);
+ ExamInitialWeight beforeExamInitialWeight = examInitialWeightList.remove(beforeSideIndex);
+ examInitialWeightList.add(afterSideIndex, beforeExamInitialWeight);
}
}
}
- return assigningTopicList;
+ return examInitialWeightList;
}
+ public List<Exam> createExamList(Examination examination) {
+ List<Topic> topicList = examination.getTopicList();
+ List<Exam> examList = new ArrayList<Exam>(topicList.size());
+ Map<Topic, Exam> topicToExamMap = new HashMap<Topic, Exam>(topicList.size());
+ for (Topic topic : topicList) {
+ Exam exam = new Exam();
+ exam.setId(topic.getId());
+ exam.setTopic(topic);
+ examList.add(exam);
+ topicToExamMap.put(topic, exam);
+ }
+ for (PeriodHardConstraint periodHardConstraint : examination.getPeriodHardConstraintList()) {
+ if (periodHardConstraint.getPeriodHardConstraintType() == PeriodHardConstraintType.EXAM_COINCIDENCE) {
+ Exam leftExam = topicToExamMap.get(periodHardConstraint.getLeftSideTopic());
+ Exam rightExam = topicToExamMap.get(periodHardConstraint.getRightSideTopic());
+
+ Set<Exam> newCoincidenceExamSet = new HashSet<Exam>();
+ ExamCoincidence leftExamCoincidence = leftExam.getExamCoincidence();
+ if (leftExamCoincidence != null) {
+ newCoincidenceExamSet.addAll(leftExamCoincidence.getCoincidenceExamSet());
+ } else {
+ newCoincidenceExamSet.add(leftExam);
+ }
+ ExamCoincidence rightExamCoincidence = rightExam.getExamCoincidence();
+ if (rightExamCoincidence != null) {
+ newCoincidenceExamSet.addAll(rightExamCoincidence.getCoincidenceExamSet());
+ } else {
+ newCoincidenceExamSet.add(rightExam);
+ }
+ ExamCoincidence newExamCoincidence = new ExamCoincidence(newCoincidenceExamSet);
+ leftExam.setExamCoincidence(newExamCoincidence);
+ rightExam.setExamCoincidence(newExamCoincidence);
+ }
+ }
+ return examList;
+ }
+
+ private class ExamInitialWeight implements Comparable<ExamInitialWeight> {
+
+ private Exam exam;
+ private int totalStudentSize;
+
+ private ExamInitialWeight(Exam exam) {
+ this.exam = exam;
+ if (exam.getExamCoincidence() == null) {
+ totalStudentSize = exam.getTopicStudentListSize();
+ } else {
+ totalStudentSize = 0;
+ for (Exam coincidenceExam : exam.getExamCoincidence().getCoincidenceExamSet()) {
+ totalStudentSize += coincidenceExam.getTopicStudentListSize();
+ }
+ }
+
+ }
+
+ public Exam getExam() {
+ return exam;
+ }
+
+ public int compareTo(ExamInitialWeight other) {
+ // TODO calculate a assigningScore based on the properties of a topic and sort on that assigningScore
+ return new CompareToBuilder()
+ .append(other.totalStudentSize, totalStudentSize) // Descending
+ .append(other.exam.getTopic().getDuration(), exam.getTopic().getDuration()) // Descending
+ .append(exam.getId(), other.exam.getId()) // Ascending
+ .toComparison();
+ }
+
+ }
+
private class PeriodScoring implements Comparable<PeriodScoring> {
private Period period;
@@ -172,7 +334,7 @@
}
public int compareTo(PeriodScoring other) {
- return - new CompareToBuilder().append(score, other.score).toComparison();
+ return -new CompareToBuilder().append(score, other.score).toComparison();
}
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationSolverBenchmarkConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationSolverBenchmarkConfig.xml 2008-01-20 16:17:57 UTC (rev 17986)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationSolverBenchmarkConfig.xml 2008-01-20 17:21:41 UTC (rev 17987)
@@ -26,7 +26,7 @@
ge0ffrey's main pc: 429
ge0ffrey's old pc: 1152
-->
- <maximumSecondsSpend>1152</maximumSecondsSpend>
+ <maximumSecondsSpend>1</maximumSecondsSpend>
</finish>
</inheritedLocalSearchSolver>
More information about the jboss-svn-commits
mailing list