#! /usr/bin/env python

import random
import math
import sys
import time

niter=0

def f(x):
    return (x-1.0)*(x-1.0)+100


seed = int(sys.argv[1])
niter = int(sys.argv[5])
dosleep=0
if len(sys.argv) == 7:
   dosleep = int(sys.argv[6])

random.seed(seed)

proby = float(sys.argv[4])
offset=0.0
if random.uniform(0.0,1.0) < proby:
   offset = 2.0

scale = float(sys.argv[3])

x_min = 1000
i=0

while i<niter:
    if sys.argv[2] == "log":
        x = math.log(random.uniform(0.0,1.0)*scale+offset)
    else:
        x = math.exp(random.uniform(0.0,1.0)*scale+offset)
    if f(x) < f(x_min):
        x_min = x
    i=i+1

print "Point:   " , x_min
print "Value:   " , f(x_min)
print "Seed:    " , seed
print "Proby:   " , proby
print "Scale:   " , scale
print "Offset:  " , offset
print "Niter:   " , i
print "Mapping: ", sys.argv[2]

if dosleep:
   time.sleep(1)
