samer@0: package samer.tools; samer@0: samer@0: import samer.core.types.*; samer@0: import samer.core.*; samer@0: samer@0: public class RateSchedule extends AnonymousTask { samer@0: VDouble rate,dec; samer@0: samer@0: public void setRatio(double r) { dec.set(1-r); } samer@0: public void setCount(double n) { dec.set(1/(n+1)); } samer@0: samer@0: public RateSchedule(VDouble rate) { samer@0: this.rate=rate; samer@0: Shell.push(rate.getNode()); samer@0: this.dec=new VDouble("relative dec",0.01); samer@0: Shell.pop(); samer@0: // setCount(n); samer@0: } samer@0: samer@0: public void dispose() { dec.dispose(); super.dispose(); } samer@0: public void run() { samer@0: // rate.value*=n/(1+n); n+=1; samer@0: double d=dec.value; samer@0: if (d>=1) d=1; else if (d<0) d=0; samer@0: rate.value -= rate.value*d; // /(++n); samer@0: dec.value/=1+d; samer@0: dec.set(d/(1+d)); samer@0: rate.changed(); samer@0: } samer@0: } samer@0: samer@0: // note to self: add agent to rate viewable. samer@0: // need linked list of Agents -- DoubleAgent?!