List of usage examples for org.apache.commons.math.optimization.linear LinearConstraint LinearConstraint
public LinearConstraint(final RealVector coefficients, final Relationship relationship, final double value)
From source file:rb.app.RBnSCMCSystem.java
public double get_SCM_LB() { //return 0.01; double min_J_obj = 0.; double[] min_Jlocal_obj = new double[n_mubar]; // Sort the indices of mu_bar based on distance from current_parameters List<Integer> sortedmubarIndices = getSorted_CJ_Indices(mu_bar); int icount = 0; //while ((min_J_obj<=0) && (icount < sortedmubarIndices.size())){ while ((min_J_obj <= 0) && (icount < sortedmubarIndices.size())) { int imubar = sortedmubarIndices.get(icount); // First, declare the constraints Collection constraints = new ArrayList(); // Add bounding box constraints for the get_Q_a() variables for (int q = 0; q < get_Q_a(); q++) { double[] index = new double[get_Q_a() * 2]; index[q] = 1.;/*from w ww .j a va 2 s . c o m*/ constraints.add(new LinearConstraint(index, Relationship.GEQ, B_min[q] / beta_bar[imubar])); constraints.add(new LinearConstraint(index, Relationship.LEQ, B_max[q] / beta_bar[imubar])); index[q] = 0.; index[q + get_Q_a()] = 1.; constraints.add(new LinearConstraint(index, Relationship.GEQ, B_min[q] / beta_bar[imubar])); constraints.add(new LinearConstraint(index, Relationship.LEQ, B_max[q] / beta_bar[imubar])); } // Save the current_parameters since we'll change them in the loop below save_current_parameters(); // Add the constraint rows if (n_muhat[imubar] > 0) { for (int imuhat = 0; imuhat < n_muhat[imubar]; imuhat++) { current_parameters = mu_hat[imubar].get(imuhat); double[] constraint_row = new double[get_Q_a() * 2]; for (int q = 0; q < get_Q_a(); q++) { Complex theta_q_a = complex_eval_theta_q_a(q); constraint_row[q] = theta_q_a.getReal() * beta_bar[imubar]; constraint_row[q + get_Q_a()] = theta_q_a.getImaginary() * beta_bar[imubar]; } constraints .add(new LinearConstraint(constraint_row, Relationship.GEQ, beta_hat[imubar][imuhat])); } } // Now load the original parameters back into current_parameters // in order to set the coefficients of the objective function reload_current_parameters(); // Create objective function object double[] objectiveFn = new double[get_Q_a() * 2]; for (int q = 0; q < get_Q_a(); q++) { Complex theta_q_a = complex_eval_theta_q_a(q); objectiveFn[q] = theta_q_a.getReal() * beta_bar[imubar]; objectiveFn[q + get_Q_a()] = theta_q_a.getImaginary() * beta_bar[imubar]; } LinearObjectiveFunction f = new LinearObjectiveFunction(objectiveFn, 0.); try { SimplexSolver solver = new SimplexSolver(1e-6); RealPointValuePair opt_pair = solver.optimize(f, constraints, GoalType.MINIMIZE, false); min_Jlocal_obj[icount] = opt_pair.getValue(); } catch (OptimizationException e) { Log.e("RBSCMSYSTEM_TAG", "Optimal solution not found"); e.printStackTrace(); } catch (Exception e) { Log.e("RBSCMSYSTEM_TAG", "Exception occurred during SCM_LB calculation"); e.printStackTrace(); } min_J_obj = min_J_obj > min_Jlocal_obj[icount] ? min_J_obj : min_Jlocal_obj[icount]; icount++; } return min_J_obj; }
From source file:rb.app.RBSCMSystem.java
/** * @return the SCM lower bound for the current parameters. *///w w w .ja v a2 s .com public double get_SCM_LB() { double min_J_obj = 0.; try { // First, declare the constraints Collection constraints = new ArrayList(); // Add bounding box constraints for the get_Q_a() variables for (int q = 0; q < get_Q_a(); q++) { double[] index = new double[get_Q_a()]; index[q] = 1.; constraints.add(new LinearConstraint(index, Relationship.GEQ, B_min[q])); constraints.add(new LinearConstraint(index, Relationship.LEQ, B_max[q])); } // Sort the indices of C_J based on distance from current_parameters List<Integer> sortedIndices = getSorted_CJ_Indices(); // Save the current_parameters since we'll change them in the loop below save_current_parameters(); // Add the constraint rows int n_rows = Math.min(SCM_M, C_J.size()); int count = 1; if (n_rows > 0) { for (Iterator it = sortedIndices.iterator(); it.hasNext();) { Integer mu_index = (Integer) it.next(); get_current_parameters_from_C_J(mu_index); // current_parameters = C_J.get(mu_index); double[] constraint_row = new double[get_Q_a()]; for (int q = 0; q < get_Q_a(); q++) { constraint_row[q] = eval_theta_q_a(q); } constraints.add( new LinearConstraint(constraint_row, Relationship.GEQ, C_J_stability_vector[mu_index])); if (count >= n_rows) break; count++; } } // Now load the original parameters back into current_parameters // in order to set the coefficients of the objective function reload_current_parameters(); // Create objective function object double[] objectiveFn = new double[get_Q_a()]; for (int q = 0; q < get_Q_a(); q++) { objectiveFn[q] = eval_theta_q_a(q); } LinearObjectiveFunction f = new LinearObjectiveFunction(objectiveFn, 0.); SimplexSolver solver = new SimplexSolver(); RealPointValuePair opt_pair = solver.optimize(f, constraints, GoalType.MINIMIZE, false); min_J_obj = opt_pair.getValue(); } catch (OptimizationException e) { Log.e("DEBUG_TAG", "Optimal solution not found"); e.printStackTrace(); } catch (Exception e) { Log.e("DEBUG_TAG", "Exception occurred during SCM_LB calculation"); e.printStackTrace(); } Log.d(DEBUG_TAG, "SCM val = " + min_J_obj); return min_J_obj; }