Based on your post and discussion with
BrowserUk, my first thought is a Gaussian - see
Normal_distribution. The functional form gives you a width parameter and the normalization is known, so it will satisfy your importance and radius requirements. You could probably implement your boost parameter by modifying the exponent on x. Perhaps something like:
#!/usr/bin/perl -w
use warnings;
use strict;
sub boost {
my ($x, $importance, $radius, $drop) = @_;
return $importance * exp( -($x/$radius)**$drop );
}
my $imp = 1000;
my $rad = 100;
my $drop = 1;
for (map 2**$_, 1..15) {
my $boost = boost($_, $imp, $rad, $drop);
my $bar = "@" x ($boost/$imp*50);
printf "%6d %s %.1f\n", $_, $bar, $boost;
}
__END__
2 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 980.2
4 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 960.8
8 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 923.1
16 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 852.1
32 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 726.1
64 @@@@@@@@@@@@@@@@@@@@@@@@@@ 527.3
128 @@@@@@@@@@@@@ 278.0
256 @@@ 77.3
512 6.0
1024 0.0
2048 0.0
4096 0.0
8192 0.0
16384 0.0
32768 0.0
Update: Fixed typo in call order.