golden-spiral.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #include <gecode/driver.hh>
00035
00036 #include <gecode/minimodel.hh>
00037 #include <gecode/float.hh>
00038
00039 using namespace Gecode;
00040
00077 class GoldenSpiral : public FloatMaximizeScript {
00078 protected:
00080 FloatVarArray f;
00081 public:
00083 GoldenSpiral(const Options& opt)
00084 : FloatMaximizeScript(opt), f(*this,4,-20,20) {
00085
00086 FloatVar theta = f[0];
00087 FloatVar r = f[3];
00088 FloatVar x = f[1];
00089 FloatVar y = f[2];
00090 rel(*this, theta >= 0);
00091 rel(*this, r >= 0);
00092 rel(*this, r*cos(theta) == x);
00093 rel(*this, r*sin(theta) == y);
00094 rel(*this, exp(0.30649*theta) == r);
00095
00096 branch(*this,theta,FLOAT_VAL_SPLIT_MIN());
00097 }
00099 GoldenSpiral(GoldenSpiral& p)
00100 : FloatMaximizeScript(p) {
00101 f.update(*this, p.f);
00102 }
00104 virtual Space* copy(void) {
00105 return new GoldenSpiral(*this);
00106 }
00108 virtual FloatVar cost(void) const {
00109 return f[0];
00110 }
00112 virtual void print(std::ostream& os) const {
00113 os << "XY " << f[1].med() << " " << f[2].med()
00114 << std::endl;
00115 }
00116
00117 };
00118
00122 int main(int argc, char* argv[]) {
00123 Options opt("GoldenSpiral");
00124 opt.solutions(0);
00125 opt.step(0.1);
00126 opt.parse(argc,argv);
00127 FloatMaximizeScript::run<GoldenSpiral,BAB,Options>(opt);
00128 return 0;
00129 }
00130
00131