Implementation of Perturbation in Id #232
Replies: 3 comments 38 replies
Probably not, but every optimization of orbit computation, including the bailout test and periodicity checking, has a trade-off and sometimes you want to force things one way or another. For instance, technically bailout value of 4.0 is sufficient for determining inside and outside of the M-set, but when computing some types of images (for instance potential), you want to increase the bailout value dramatically beyond 4. Similarly, periodicity checking can be turned off if so desired. That's why I think we want to expose the ability for force perturbation calculations off and allow the user to specify the error tolerance. There's also the possibility that a perturbation formula was coded incorrectly. The image renders correct without perturbation, but renders incorrect with perturbation, so you want to force it off, even though it's slower. UltraFractal (help section on perturbation) switches to perturbation if the formula supports it when arbitrary precision is being used. I think we can follow suit on that and only use perturbation when switching to arbitrary precision. UF has the settings "Precise", "Fast" and "Very Fast" for setting the error value used in perturbation. We could follow suit and map those terms to specific allowed amounts of error. That certainly simplifies things for the user instead of having to understand what numeric value should be used for the error.
I think that's fine; it's what UF does.
I thought we covered that previously; the perturbation algorithm should be completely insensitive to the order in which pixels are plotted. If the current pixel generates too much error, then a new reference point needs to be chosen, etc. There's nothing in the perturbation algorithm that requires the entire image to be generated from a single reference point, nor does it require you to discard one reference point simply because a pixel couldn't be accurately computed from it. |
|
BTW, the name is either Iterated Dynamics (both words capitalized) or Id for short, not ID. |
|
"..and of course cmdfiles.cpp gets a new parameter parser for the parameter that sets the mode and tolerance." Does that mean when we want to change the perturbation mode we have to edit a file? I don't understand how this all works. Is it set in sstools.ini? This seems far more difficult than simply having a field that we change. Wouldn't it be better to add it to the 'Z' screen or something? |
Uh oh!
There was an error while loading. Please reload this page.
Paul:
Instead of having a global parameter to say we are using perturbation, why not use a g_params[] value that specifies we are using perturbation? That way we only offer it for fractals that can work on perturbation. I’m implementing it now and removing ‘p’ as a viable calc_mode.
Then I can do the work of fixing the plot modes without having to interpret the mode through ‘p’.
Richard:
Using a parameter is not the right way to go because things should be "obvious" and parameters are not for this purpose.
Perturbation is a speedup technique, but it can introduce errors from the "true" image because it is an approximation to the true orbit.
So there are three choices:
Additionally there is the desire to specify the amount of tolerated error before a new reference point is forced:
This implies a new variable in perturbation.h:
..and of course cmdfiles.cpp gets a new parameter parser for the parameter that sets the mode and tolerance.
When a fractal type indicates it has perturbation support in its flags, the standard engine consults the perturbation mode and calls the corresponding routines based on the mode.
The display should be updated to indicate whether or not perturbation is being used.
If you look at the UltraFractal docs, this is similar to what they have implemented: perturbation is used by default, but you can disable it and you can specify the error tolerance manually if you want.
Paul:
I don't think the Perturbation "errors" are worse than those created in solid guessing.
There are a number of reasons for not using Perturbation until we are into arbitrary precision as the code is slower than normal plotting modes. As the speed is relatively independent of the number of digits in the location, the only delay is the calculation of the reference matrix. In the current implementation branch (Perturbation250128) plotting modes work far better once we get to arbitrary precision anyway.
The outstanding issues are with plotting modes that have more than one pass, e.g. Guessing and two passes. Tesseral plotting is the fastest plotting mode at this stage. It will be good to get solid guessing working with perturbation for speed.
All reactions