examples/multimin/cqp.rb in gsl-1.15.3 vs examples/multimin/cqp.rb in gsl-1.16.0.6

- old
+ new

@@ -9,92 +9,92 @@ cqp_data.q = GSL::Vector[-2.0, -1.0] cqp_data.A = GSL::Matrix[[3, 1], 1, 2] cqp_data.b = GSL::Vector.alloc(1); cqp_data.b[0] = 1.5 cqp_data.C = GSL::Matrix[[1, 0, 0, 1], 2, 2] cqp_data.d = GSL::Vector.calloc(2) - + Test_Problem.new("Goulds's problem", 2, 1, 2, cqp_data, 0.0) - end + end def Test_Problem.betts() cqp_data = GSL::CQP::Data.alloc() cqp_data.Q = GSL::Matrix[[0.02, 0, 0, 2], 2, 2] cqp_data.q = GSL::Vector.calloc(2) cqp_data.A = GSL::Matrix[[10, -1.0], 1, 2] cqp_data.b = GSL::Vector.alloc(1); cqp_data.b[0] = 20 cqp_data.C = GSL::Matrix.calloc(4, 2) cqp_data.C[0,0] = 1.0; cqp_data.C[1,1] = 1.0 - cqp_data.C[2,0] = -1.0; cqp_data.C[3,1] = -11.0 + cqp_data.C[2,0] = -1.0; cqp_data.C[3,1] = -11.0 cqp_data.d = GSL::Vector[2.0, -50, -50, -50] - - + + Test_Problem.new("Betts's problem", 2, 1, 4, cqp_data, 0.04) end def Test_Problem.beale() cqp_data = GSL::CQP::Data.alloc() cqp_data.Q = GSL::Matrix[[4, 2, 2, 2, 4, 0, 2, 0, 2], 3, 3] cqp_data.q = GSL::Vector[-8, -6, -4] cqp_data.A = GSL::Matrix[[-1, -1, -2], 1, 3] cqp_data.b = GSL::Vector.alloc(1); cqp_data.b[0] = -3.0 cqp_data.C = GSL::Matrix.eye(3, 3) cqp_data.d = GSL::Vector.calloc(3) - + cqp_data.Q[0,0] = 4.0; cqp_data.Q[0,1] = 2.0 - cqp_data.Q[1,0] = 2.0; cqp_data.Q[1,1] = 4.0 - cqp_data.Q[2,0] = 2.0; cqp_data.Q[2,2] = 2.0 + cqp_data.Q[1,0] = 2.0; cqp_data.Q[1,1] = 4.0 + cqp_data.Q[2,0] = 2.0; cqp_data.Q[2,2] = 2.0 Test_Problem.new("Beale's problem", 3, 1, 3, cqp_data, 9.0+1.0/9.0) - end + end def initialize(name, n, me, mi, cqp, opt_value) @name = name @n = n @me = me @mi = mi @cqp = cqp @opt_value = opt_value end - + def solve() max_iter = 1000 iter = 1 status = GSL::CONTINUE s = GSL::CQP::Minimizer.alloc("mg_pdip", @n, @me, @mi) s.set(@cqp) printf("******************** %s ********************\n\n", @name) printf("== Itn ======= f ======== ||gap|| ==== ||residual||\n\n") - + begin status = s.iterate status = s.test_convergence(1e-10, 1e-10) printf("%4d %14.8f %13.6e %13.6e\n", iter, s.f, s.gap, s.residuals_norm) if status == GSL::SUCCESS printf("\nMinimum is found at\n"); x = s.x lm_eq = s.lm_eq - lm_ineq = s.lm_ineq + lm_ineq = s.lm_ineq for j in 0...x.size do printf("%9.6f ", x[j]) end printf("\n\n") printf("\nLagrange-multipliers for Ax=b\n") for j in 0...lm_eq.size do printf("%9.6f ", lm_eq[j]) end - printf("\n\n") + printf("\n\n") printf("\nLagrange-multipliers for Cx>=d\n"); for j in 0...lm_ineq.size do printf("%9.6f ", lm_ineq[j]) end - printf("\n\n") + printf("\n\n") else iter += 1 end - end while status == GSL::CONTINUE and iter <= max_iter - GSL::SUCCESS + end while status == GSL::CONTINUE and iter <= max_iter + GSL::SUCCESS end attr_accessor :name, :n, :me, :mi - attr_accessor :cqp, :opt_value + attr_accessor :cqp, :opt_value end end tp = Array.new(3)