@@ -68,16 +68,14 @@ using namespace Gecode;
6868 *
6969 * \ingroup Example
7070 */
71- class ArchimedeanSpiral : public Script {
71+ class ArchimedeanSpiral : public FloatMaximizeScript {
7272protected:
7373 // / The numbers
7474 FloatVarArray f;
75- // / Minimum distance between two solutions
76- FloatNum step;
7775public:
7876 // / Actual model
79- ArchimedeanSpiral (const Options&)
80- : f(*this ,4 ,-20 ,20 ), step( 0.1 ) {
77+ ArchimedeanSpiral (const Options& opt )
78+ : FloatMaximizeScript(opt), f(*this ,4 ,-20 ,20 ) {
8179 // Post equation
8280 FloatVar theta = f[0 ];
8381 FloatVar r = f[3 ];
@@ -95,17 +93,16 @@ class ArchimedeanSpiral : public Script {
9593 }
9694 // / Constructor for cloning \a p
9795 ArchimedeanSpiral (bool share, ArchimedeanSpiral& p)
98- : Script (share,p), step(p.step ) {
96+ : FloatMaximizeScript (share,p) {
9997 f.update (*this ,share,p.f );
10098 }
10199 // / Copy during cloning
102100 virtual Space* copy (bool share) {
103101 return new ArchimedeanSpiral (share,*this );
104102 }
105- // / Add constraint to current model to get next solution (not too close)
106- virtual void constrain (const Space& _b) {
107- const ArchimedeanSpiral& b = static_cast <const ArchimedeanSpiral&>(_b);
108- rel (*this , f[0 ] >= (b.f [0 ].max ()+step));
103+ // / Cost function
104+ virtual FloatVar cost (void ) const {
105+ return f[0 ];
109106 }
110107 // / Print solution coordinates
111108 virtual void print (std::ostream& os) const {
@@ -120,9 +117,10 @@ class ArchimedeanSpiral : public Script {
120117 */
121118int main (int argc, char * argv[]) {
122119 Options opt (" ArchimedeanSpiral" );
123- opt.parse (argc,argv);
124120 opt.solutions (0 );
125- Script::run<ArchimedeanSpiral,BAB,Options>(opt);
121+ opt.step (0.1 );
122+ opt.parse (argc,argv);
123+ FloatMaximizeScript::run<ArchimedeanSpiral,BAB,Options>(opt);
126124 return 0 ;
127125}
128126
0 commit comments