Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import com.cureos.numerics.Calcfc;
- import com.cureos.numerics.Cobyla;
- public class JCobylaTest {
- public static void main(String[] args) {
- double[] optimize = new double[8];
- for (int i = 0; i < optimize.length; i++) {
- optimize[i] = 1d/optimize.length;
- }
- Cobyla.FindMinimum(new Calcfc() {
- @Override
- public double Compute(int n, int m, double[] x, double[] con) {
- // ----- vars have to be non negative -----
- for (int i = 0; i < x.length; i++) {
- con[i] = x[i];
- }
- // ----- END -----
- // ----- sum of vars have to be approximately 1 -----
- double sum = 0;
- for (int i = 0; i < x.length; i++) {
- sum += x[i];
- }
- con[x.length] = sum - 0.9999;
- con[x.length + 1] = 1.0001 - sum;
- // ----- END -----
- // ----- pnorm_1(matrix * x) <= 0.06651 -----
- double[][] matrix = {{-0.25, -0.25, 0.75, 0.75, -0.25, -0.25, 0.75, 0.75},
- {0.0, -0.8, 0.0, 0.2, 0.0, -0.8, 0.0, 0.2},
- {0.0, 0.0, 0.0, 0.0, -0.6, -0.6, 0.4, 0.4},
- {0.0, 0.0, -0.7, -0.7, 0.0, 0.0, 0.3, 0.3},
- {0.0, 0.0, -0.5, 0.5, 0.0, 0.0, -0.5, 0.5},
- {-0.05, -0.05, 0.0, 0.0, 0.95, 0.95, 0.0, 0.0},
- {-0.01, 0.99, 0.0, 0.0, -0.01, 0.99, 0.0, 0.0}};
- double[] matrix_m_x = new double[matrix.length];
- sum = 0;
- for (int i = 0; i < matrix.length; i++) {
- for (int j = 0; j < matrix[i].length; j++) {
- matrix_m_x[i] = matrix_m_x[i] + matrix[i][j] * x[j];
- }
- sum += Math.abs(matrix_m_x[i]);
- }
- con[x.length + 2] = 0.06651 - sum;
- // ----- END -----
- // ----- maximise entropy -----
- double entropie = 0;
- for (int i = 0; i < x.length; i++) {
- double d = x[i];
- if (Double.compare(d, 0) <= 0) {
- continue;
- }
- entropie -= d *log2(d);
- }
- // ----- END -----
- return -entropie;
- }
- }, 8, 11, optimize, /*1*/0.001, 1.0e-6, 3, 1000);
- }
- private static double log2(double val) {
- return Math.log10(val) / Math.log(2);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement