# PREDICTION_SCALE
PS ?= 20
# attack or defense
AD ?= attack
# evaluation function
EVAL ?= e
THRESHOLD ?= 500

LEARN_PDP = ../pdp40k-$(PS).txt
KIF_FILE = ../../../data/kisen/01.kif

POSITIONS = ps$(PS)-$(AD)-positions.txt

LEARN_POSITIONS = $(POSITIONS:.txt=)-l.txt
LEARN_INSTANCES = ps$(PS)-$(AD)-$(EVAL)-instances-l.txt

VALIDATION_POSITIONS = $(POSITIONS:.txt=)-v.txt
VALIDATION_INSTANCES = $(LEARN_INSTANCES:-l.txt=)-v.txt

PROOF_WEIGHTS = ps$(PS)-$(AD)-$(EVAL)-proof.txt
PROOF_VALIDATE = $(PROOF_WEIGHTS:.txt=.scat)
DISPROOF_WEIGHTS =  $(subst proof,disproof,$(PROOF_WEIGHTS))
DISPROOF_VALIDATE = $(subst proof,disproof,$(PROOF_VALIDATE))

# programs
LEARN = ../learn -T $(THRESHOLD) -H $(EVAL)
VALIDATE = ../evalpositions -k $(KIF_FILE) -H $(EVAL)

positions: $(LEARN_POSITIONS) # $(VALIDATION_POSITIONS)
instances: $(LEARN_INSTANCES) $(VALIDATION_INSTANCES)
proof-weights:  $(PROOF_WEIGHTS) 
proof-validate: $(PROOF_VALIDATE)
disproof-weights:  $(DISPROOF_WEIGHTS)
disproof-validate: $(DISPROOF_VALIDATE)

$(POSITIONS): $(LEARN_PDP)
	../tools/extract.pl $(LEARN_PDP) > $@
$(LEARN_POSITIONS): $(POSITIONS) 
	../tools/shuffle.pl $(POSITIONS:.txt=) 
$(LEARN_INSTANCES): $(LEARN_POSITIONS)
	../analyzerecord -H $(EVAL) -k $(KIF_FILE) < $< > $@
$(VALIDATION_INSTANCES): $(VALIDATION_POSITIONS)
	../analyzerecord -H $(EVAL)  -k $(KIF_FILE) < $< > $@

$(PROOF_WEIGHTS): $(LEARN_POSITIONS) $(LEARN_INSTANCES)
	$(LEARN) -M p -w $@ -I $(LEARN_INSTANCES) -P $(LEARN_POSITIONS)
$(PROOF_VALIDATE): $(VALIDATION_POSITIONS) $(VALIDATION_INSTANCES)
	$(LEARN) -M p -w $(PROOF_WEIGHTS) -V -I $(VALIDATION_INSTANCES) \
	   -P $(VALIDATION_POSITIONS) > $@

$(DISPROOF_WEIGHTS): $(LEARN_POSITIONS)
	$(LEARN) -M d -w $@ -I $(LEARN_INSTANCES) -P $(LEARN_POSITIONS)
$(DISPROOF_VALIDATE): $(LEARN_POSITIONS)
	$(LEARN) -M d -w $(DISPROOF_WEIGHTS) -V -I $(VALIDATION_INSTANCES) \
	   -P $(VALIDATION_POSITIONS) > $@

clean:
	rm $(POSITIONS) $(INSTANCES)

### 
validation-$(AD)-null-null.txt:
	$(VALIDATE) -o $@ -P < $(VALIDATION_POSITIONS)
validation-$(AD)-null-piece.txt:
	$(VALIDATE) -o $@ < $(VALIDATION_POSITIONS)
validation-$(AD)-$(PS)-$(EVAL)-null.txt:
	$(VALIDATE) -o $@ -S $(PS) -P -p $(PROOF_WEIGHTS) -d $(DISPROOF_WEIGHTS) < $(VALIDATION_POSITIONS)
validation-$(AD)-$(PS)-$(EVAL)-piece.txt:
	$(VALIDATE) -o $@ -S $(PS) -p $(PROOF_WEIGHTS) -d $(DISPROOF_WEIGHTS) < $(VALIDATION_POSITIONS)

### 
# *.scat 
#  ../tools/validation_summary.pl validation-*.txt  
## 
# n2
#../../tools/scatter.sh validation-proof+null-piece+20-n2-piece.scat    proven null+piece    n2+piece 
#../../tools/scatter.sh validation-proof+null-null+20-n2-null.scat      proven null+null     n2+null 
#../../tools/scatter.sh validation-disproof+null-piece+20-n2-piece.scat disproven null+piece n2+piece 
#../../tools/scatter.sh validation-disproof+null-null+20-n2-null.scat   disproven null+null  n2+null 
## n
#../../tools/scatter.sh validation-proof+null-piece+20-n-piece.scat    proven null+piece    n+piece 
#../../tools/scatter.sh validation-proof+null-null+20-n-null.scat      proven null+null     n+null 
#../../tools/scatter.sh validation-disproof+null-piece+20-n-piece.scat disproven null+piece n+piece 
#../../tools/scatter.sh validation-disproof+null-null+20-n-null.scat   disproven null+null  n+null 
## e
#../../tools/scatter.sh validation-proof+null-piece+20-e-piece.scat    proven null+piece    e+piece 
#../../tools/scatter.sh validation-proof+null-null+20-e-null.scat      proven null+null     e+null 
#../../tools/scatter.sh validation-disproof+null-piece+20-e-piece.scat disproven null+piece e+piece 
#../../tools/scatter.sh validation-disproof+null-null+20-e-null.scat   disproven null+null  e+null 


###  histogram
#ps10-attack-positions-l.hist
ps$(PS)-%-l-p.hist: ps$(PS)-%-l.txt
	awk '$$3 < $(PS) {print $$3} $$3 >= $(PS) {print $(PS)}' $< | histogram.pl 2 > $@
ps$(PS)-%-l-d.hist: ps$(PS)-%-l.txt
	awk '$$4 < $(PS) {print $$4} $$4 >= $(PS) {print $(PS)}' $< | histogram.pl 2 > $@

# ../tools/pd-hist.sh