:- load_files([best,w,about,abcde,learn],[silent(true),if(not_loaded)]).
	
demon(F,R) :-
	[F],
	w(R,W),printPairs(W),
	setof(S,R^W^scores0(R,W,S),All),printPairs(All),
	bests(All,100,B), 
	printa(B),
	picks(B,30,'~p\n').


demo(w) :-
	wmeData(Name,'data/contactw.csv',W),
	forall(wme2abcde(T,W,A),
			(printa(A),
			 print(Name=T),nl)).

demo(w1) :-
	wmeData(_,'data/contactw.csv',W),
	printa(W),
	forall(wme2abcde(_,W,A0),
			%( abcdes([1,3,5,7,9,11,13,15,16,17,18,19,21,23,24],A0,A),
			( abcde1(1,A0,A),
	          printa(A),
	          accuracy(A,Acc),
	          abcd(A,Ax,Bx,Cx,Dx),
				balance(A,Bal),
			  printa([acc=Acc,a=Ax,b=Bx,c=Cx,d=Dx,bal=Bal]),nl
            )).

demo(w2) :-
	wmeData(_,'data/contactw.csv',W),
	printa(W),
	forall(wme2abcde(_,W,A0),
	    (abcdes([1,3,5,7,9,11,13,15,16,17,18,19,21,23,24],A0,A),
         printa(A),
         accuracy(A,Acc),
         abcd(A,Ax,Bx,Cx,Dx),
         balance(A,Bal),
         printa([acc=Acc,a=Ax,b=Bx,c=Cx,d=Dx,bal=Bal])
    )).

demo(w3) :- 
	wmeData(_,'data/contactw.csv',W),
	bagof(X,W^demoW2(W,X),L),
	bests(L,10,B),
	printa(B).
	

demo(w4) :- 
	wmeData(_,'data/contactw.csv',W),
	bagof(X,W^demoW4(W,X),L),
	bests(L,10,B),
	printa(B).
demo(w5) :- 
	wmeData(_,'data/contactw.csv',W),
	wme2abcde(none,W,A),
	bagof(X,W^A^demoW5(A,W,X),L),
	bests(L,20,B0),
	learn(W,A,B0,B),
	printa(B).
	
demo(read1) :- ['data/contact.csv'], w(lens,L),print(L),nl,printPairs(L).
demo(read0) :- 
	['data/data1.csv'], 
	w(lens,W),printPairs(W),
	forall(scores(lens,W,S),
	   format('~p \n',[S])).
demo(best) :-
	generator4DemoBest(L),
	time(bests(L, 30,B)),
	printa(B).

demo(pick) :-
	L=  [0.000011=s, 0.000010=t, 0.000009=u, 0.000008=v, 0.000007=w, 0.000006=x,
         0.167582848=n, 0.160306951=o, 0.159305062=p, 0.070783133=q, 0.000012=r,
         0.000005=y, 0.000004=z, 0.000003=z1, 0.000001=z2, 0.000001=z3,
		 0.98=a, 0.67=b, 0.56=c, 0.45=d, 
         0.189341165=j, 0.184156905=k, 0.181646348=l, 0.12880837=m,
         0.000001=z4],
	bests(L,1000,B),
	printa(B),
	picks(B,75).
	
demo(any1) :-
	X is 2^32,
	R is random(X)/(X-1),	
   any1([0.88=a, 0.87=b, 0.86=c, 0.85=d, 0.84=e, 0.83=f, 0.82=g, 0.81=h, 0.8=i,
         0.289341165=j, 0.284156905=k, 0.281646348=l, 0.272880837=m,
         0.267582848=n, 0.260306951=o, 0.259305062=p, 0.170783133=q, 0.000001=r,
         0.000001=s, 0.000001=t, 0.000001=u, 0.000001=v, 0.000001=w, 0.000001=x,
         0.000001=y, 0.000001=z, 0.000001=za, 0.000001=zb, 0.000001=zc,
         0.000001=zd],0,9.286015249,R, 0.8=a,Out),
	print(Out),nl.

generator4DemoBest(L) :- length(L,1000), maplist(generator4DemoBest1,L,L).
generator4DemoBest1(_,X=a) :- X is sin(random(10000)).

demoW2(W,Bal=(Goal : Range*Var)) :-
	wme2abcde(Goal,W,A0),
	printa(A0),
	wme_(independentRange,Range*Var=Inst,W),
	abcdes(Inst, A0,A),abcd(A,Ax,Bx,Cx,Dx),
    accuracy(A,Acc),pf(A,Pf),pd(A,Pd),effort(A,Ef),
    balance(A,Bal),
    printa([goal=Goal,var=Var,range=Range,a=Ax,b=Bx,c=Cx,d=Dx,acc=Acc,pf=Pf,pd=Pd,effort=Ef,bal=Bal]).

	
demoW4(W,Bal=(Goal : Range*Var)) :-
	wme2abcde(Goal,W,A0),
	wme_(independentRange,Range*Var=Inst,W),
	abcdes(Inst, A0,A),
    balance(A,Bal).

demoW5(A0,W,Bal=[Var=Range]) :-
	wme_(independentRange,Range*Var=Inst,W),
	abcdes(Inst, A0,A),
    balance(A,Bal).




