public String run(String[] buildData, String algChoice, String matroidChoice, String oracleType) {

        running = true;

        updateAll(buildData, algChoice, matroidChoice, oracleType);
        String errors = getErrors(algChoice, matroidChoice, oracleType);
        if (errors != null) return errors;

        oracle = oracleFactory.makeOracle();
        Algorithm algorithm = algorithmBuilder.buildAlgorithm();
        randomSet = randomiserFactory.createRandomiser();
        if (!running) {
            return "";
        }
        for (int i = 0; i < randomSet.getSize(); i++) {

            if (!running) {
                return "";
            }
            if (algorithm.consider(randomSet.getItem(), i)) {
                oracle.consider(randomSet.getItem());
            }
            randomSet.alert();
        }

        return oracle.solution();
    }