00001 /* This file is part of the Solver for Udine Course Timetabling Problem based 00002 * on Multiphase Exploitation of Multiple Objective-/Value-restricted Submodels 00003 * (abbreviated MEMOS for Timetabling). 00004 * 00005 * Copyright 2009 Jakub Marecek 00006 * Copyright 2009 The University of Nottingham 00007 * http://www.cs.nott.ac.uk/~jxm/timetabling/memos/ 00008 * http://memos-solvers.sourceforge.net/ 00009 * 00010 * MEMOS for Timetabling is free software: you can redistribute it and/or 00011 * modify it under the terms of the GNU General Public License as published by 00012 * the Free Software Foundation, either version 3 of the License, or (at your 00013 * option) any later version. It would be greatly appreciated, however, if you 00014 * could cite the following paper in any work that uses it: 00015 * Edmund K. Burke, Jakub Marecek, Andrew J. Parkes, and Hana Rudova: 00016 * Decomposition, Reformulation, and Diving in University Course Timetabling. 00017 * Computers and Operations Research. DOI 10.1016/j.cor.2009.02.023 00018 */ 00019 00020 00021 #ifndef UDINE_NEIGHBOURHOOD 00022 #define UDINE_NEIGHBOURHOOD 00023 00024 #include <vector> 00025 #include "solver_config.h" 00026 00027 namespace Udine { 00028 00029 struct CoursePeriodPair { 00030 int course; 00031 int period; 00032 }; 00033 00034 struct CourseDayNumberTriple { 00035 int course; 00036 int day; 00037 int events; 00038 }; 00039 00040 struct Neighbourhood { 00041 public: 00042 ModelType type; 00043 std::vector<CoursePeriodPair> fixPeriod; 00044 std::vector<CourseDayNumberTriple> fixDay; 00045 std::vector<CoursePeriodPair> preprocessAway; 00046 int cost; 00047 int lowerBound; 00048 int penaltyMinCourseDays; 00049 int penaltyCompactness; 00050 Neighbourhood() { 00051 type = Surface; 00052 cost = 0; 00053 lowerBound = 0; 00054 penaltyMinCourseDays = 0; 00055 penaltyCompactness = 0; 00056 } 00057 }; 00058 00059 typedef std::vector<Neighbourhood> Neighbourhoods; 00060 00061 } // END of namespace 00062 00063 #endif // UDINE NEIGHBOURHOOD
1.5.9