This file is indexed.

/usr/share/doc/ruby-gsl/examples/multimin/cqp.rb is in ruby-gsl 1.16.0.6+dfsg1-2build1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
#!/usr/bin/env ruby
require("gsl")

module GSL::CQP
  class Test_Problem
    def Test_Problem.gould()
      cqp_data = GSL::CQP::Data.alloc()
      cqp_data.Q = GSL::Matrix.eye(2, 2)
      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
    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.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
      Test_Problem.new("Beale's problem", 3, 1, 3, cqp_data, 9.0+1.0/9.0)
    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
          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("\nLagrange-multipliers for Cx>=d\n");
          for j in 0...lm_ineq.size do
            printf("%9.6f ", lm_ineq[j])
          end
          printf("\n\n")
        else
          iter += 1
        end
     end while status == GSL::CONTINUE and iter <= max_iter
      GSL::SUCCESS
    end

    attr_accessor :name, :n, :me, :mi
    attr_accessor :cqp, :opt_value
  end

end

tp = Array.new(3)
tp[0] = GSL::CQP::Test_Problem.gould()
tp[1] = GSL::CQP::Test_Problem.betts()
tp[2] = GSL::CQP::Test_Problem.beale()

tp.each do |t|
  t.solve()
end