public double[][] solveThreeStage(String method) // Method: Enter CCR, BCC, SBM
      {
    DEA stageOne = new DEA(dmu, input, interOne);
    double[][] solutionOne = null;
    try {
      if (method.equals("CCR") == true && settings[0][0] == true) // Input-Orientation
      solutionOne = stageOne.solve_Dual_Basic_Input(false); // Solve stage one
      else if (method.equals("CCR") == true && settings[0][0] == false) // Output-Orientation
      solutionOne = stageOne.solve_Dual_Basic_Output(false); // Solve stage one
      else if (method.equals("BCC") == true && settings[0][0] == true) // Input-Orientation
      solutionOne = stageOne.solve_Dual_Basic_Input(true); // Solve stage one
      else if (method.equals("BCC") == true && settings[0][0] == false) // Output-Orientation
      solutionOne = stageOne.solve_Dual_Basic_Output(true); // Solve stage one
      else if (method.equals("SBM") == true && settings[0][0] == true) // Input-Orientation
      solutionOne = stageOne.solve_Dual_SBM_Input(); // Solve stage one
      else if (method.equals("SBM") == true && settings[0][0] == false) // Output-Orientation
      solutionOne = stageOne.solve_Dual_SBM_Output(); // Solve stage one
      /*else
      throw new Exception("Falsche Methodik");*/
      solList.add(solutionOne);
    } catch (IloException ex) {
      Logger.getLogger(ThreeStageDEA.class.getName()).log(Level.SEVERE, null, ex);
    }

    // Calculate Stage 2
    DEA stageTwo = null;
    double[][] effOneFitted = null;
    if (settings[1][1] == true) // Efficiency of stage 1 is input of stage 2
    {
      double[] effOne = Evaluation.getEfficiency(solutionOne);
      effOneFitted = fitEfficiency(effOne);
      stageTwo = new DEA(dmu, effOneFitted, interTwo);
    } else {
      if (settings[2][1] == false) // Input is no combination of efficiency and intermediary product
      {
        stageTwo = new DEA(dmu, interOne, interTwo);
      } else {
        double[][] combInter = combineEffInter(Evaluation.getEfficiency(solutionOne));
        stageTwo = new DEA(dmu, combInter, interTwo);
      }
    }
    double[][] solutionTwo = null;
    try {
      if (method.equals("CCR") == true && settings[0][1] == true) // Input-Orientation
      solutionTwo = stageTwo.solve_Dual_Basic_Input(false); // Solve stage two
      else if (method.equals("CCR") == true && settings[0][1] == false) // Output-Orientation
      solutionTwo = stageTwo.solve_Dual_Basic_Output(false); // Solve stage two
      else if (method.equals("BCC") == true && settings[0][1] == true) // Input-Orientation
      solutionTwo = stageTwo.solve_Dual_Basic_Input(true); // Solve stage two
      else if (method.equals("BCC") == true && settings[0][1] == false) // Output-Orientation
      solutionTwo = stageTwo.solve_Dual_Basic_Output(true); // Solve stage two
      else if (method.equals("SBM") == true && settings[0][1] == true) // Input-Orientation
      solutionTwo = stageTwo.solve_Dual_SBM_Input(); // Solve stage two
      else if (method.equals("SBM") == true && settings[0][1] == false) // Output-Orientation
      solutionTwo = stageTwo.solve_Dual_SBM_Output(); // Solve stage two
      /*else
      throw new Exception("Falsche Methodik");*/
      solList.add(solutionTwo);
    } catch (IloException ex) {
      Logger.getLogger(ThreeStageDEA.class.getName()).log(Level.SEVERE, null, ex);
    }

    double[][] solutionOneTwo =
        createSolution(
            solutionOne,
            solutionTwo); // Create a single solution array containing weights and efficiencies.

    // Calculate Stage 3
    DEA stageThree = null;
    double[][] effTwoFitted = null;
    if (settings[1][2] == true) // Efficiency of stage 1 is input of stage 2
    {
      double[] effTwo = Evaluation.getEfficiency(solutionTwo);
      effTwoFitted = fitEfficiency(effTwo);
      stageThree = new DEA(dmu, effTwoFitted, output);
    } else {
      if (settings[2][2] == false) // Input is no combination of efficiency and intermediary product
      {
        stageThree = new DEA(dmu, interTwo, output);
      } else {
        double[][] combInterTwo = combineEffInter(Evaluation.getEfficiency(solutionTwo));
        stageThree = new DEA(dmu, combInterTwo, output);
      }
    }
    double[][] solutionThree = null;
    try {
      if (method.equals("CCR") == true && settings[0][2] == true) // Input-Orientation
      solutionThree = stageThree.solve_Dual_Basic_Input(false); // Solve stage three
      else if (method.equals("CCR") == true && settings[0][2] == false) // Output-Orientation
      solutionThree = stageThree.solve_Dual_Basic_Output(false); // Solve stage three
      else if (method.equals("BCC") == true && settings[0][2] == true) // Input-Orientation
      solutionThree = stageThree.solve_Dual_Basic_Input(true); // Solve stage three
      else if (method.equals("BCC") == true && settings[0][2] == false) // Output-Orientation
      solutionThree = stageThree.solve_Dual_Basic_Output(true); // Solve stage three
      else if (method.equals("SBM") == true && settings[0][2] == true) // Input-Orientation
      solutionThree = stageThree.solve_Dual_SBM_Input(); // Solve stage two
      else if (method.equals("SBM") == true && settings[0][2] == false) // Output-Orientation
      solutionThree = stageThree.solve_Dual_SBM_Output(); // Solve stage two
      /*else
      throw new Exception("Falsche Methodik");*/
      solList.add(solutionThree);
    } catch (IloException ex) {
      Logger.getLogger(ThreeStageDEA.class.getName()).log(Level.SEVERE, null, ex);
    }

    double[][] solutionComplete =
        createSolution(
            solutionOneTwo,
            solutionThree); // Create a single solution array containing weights and efficiencies.
    return solutionComplete;
  }