package com.datascience.core.stats;
import com.datascience.core.base.Worker;
import com.datascience.core.nominal.NominalProject;
import org.apache.commons.math3.stat.regression.SimpleRegression;
import java.util.Map;
/**
* @Author: konrad
*/
public class QSPCalculators {
public static class Linear extends QualitySensitivePaymentsCalculator {
public Linear(NominalProject project, Worker worker){
super(project, worker);
}
@Override
public Double getWorkerWage(double qualifiedWage, double costThreshold, Map<String, Double> priors) {
int m = 0;
double cost;
do {
m++;
cost = getWorkerCost(m, priors, 1000);
// If the worker is worth less than 1/100 of a qualified worker, we return a 0 payment.
if (m > 20) return 0.0;
} while (cost > costThreshold);
return qualifiedWage / m;
}
}
public static class RegressionBased extends QualitySensitivePaymentsCalculator {
public RegressionBased(NominalProject project, Worker worker){
super(project, worker);
}
@Override
public Double getWorkerWage(double qualifiedWage, double costThreshold, Map<String, Double> priors) {
SimpleRegression regression = new SimpleRegression();
for (int m = 1; m <= 41; m += 4) {
double cost = getWorkerCost(m, priors, 1000);
if (cost == 0) break;
regression.addData(Math.log(cost), m);
}
double d = regression.predict(Math.log(costThreshold));
return qualifiedWage / d;
}
}
}