[R] Optimization issue - Solution converges for any initial value

Narendra Modi bjpmodi2016 at gmail.com
Thu Sep 29 21:53:08 CEST 2016


I have put together a R snippet wherein I am trying to get optimum
values for which error is minimized. The error is the difference
between two matrices.
Every time I run the below code, I don't see any optimization
happening as in the final answer is the same as the initial estimate
regardless of what I mention as initial estimate.
Could you please advise on how can I improve it?
I have also tried using nloptr but to no avail.

To optimize vp.kval




my.data.matrix.prod <- matrix(a,nrow = length(a),1)
Estimated.Qt.mat <- matrix(b,nrow = nrow(my.data.matrix.prod), ncol = 1)
Cum.WInj.matrix <- matrix (c,nrow = nrow(my.data.matrix.prod), ncol = 1)
Koval.tD <- matrix(,nrow = nrow(my.data.matrix.prod), ncol = 1)  # tD Matrix
Koval.fw <- matrix(,nrow = nrow(my.data.matrix.prod), ncol = 1) # fw Matrix

Koval.Error.func <- function(vp.kval,n)
{
  #First convert vector(Koval.InitialData.list) to MATRIX and send it
to calculate estimated matrix

  Koval.InitialData.Matrix <- matrix(vp.kval,nrow = 2, 1,byrow = TRUE)
 # Define Koval Parameters Matrix for the "n"

  Qo.Koval <- Qo.Koval(Koval.InitialData.Matrix)  # Get Qo Estimation from Koval

  diff.values <- my.data.matrix.prod[,n] - Qo.Koval  #FIND DIFFERENCE
BETWEEN CAL. MATRIX AND ORIGINAL MATRIX

  Error <- ((colSums ((diff.values^2), na.rm = TRUE, dims =
1))/nrow(my.data.matrix.prod))^0.5    #sum of square root of the diff

  Error   # return error value
}

Qo.Koval <- function(Koval.InitialData.Matrix)
{
  Qo.Koval.Est <- matrix(,nrow(my.data.matrix.prod), 1)
#ncol(my.data.matrix.prod)

  for(rowno in 1:nrow(my.data.matrix.prod)) #number of rows of data
  {
    Koval.tD[rowno,1] = Cum.WInj.matrix[rowno,1] *
Koval.InitialData.Matrix[1,1]   # Evaluate tD matrix

    if(Koval.tD[rowno,1] < (1/Koval.InitialData.Matrix[2,1]))
    {
      Koval.fw[rowno,1] = 0
    }
    else
    {
      if(Koval.tD[rowno,1] > Koval.InitialData.Matrix[2,1])
      {
        Koval.fw[rowno,1] = 1
      }else
      {
        Koval.fw[rowno,1] = (Koval.InitialData.Matrix[2,1] -
sqrt(Koval.InitialData.Matrix[2,1]/Koval.tD[rowno,1]))/(Koval.InitialData.Matrix[2,1]-1)
      }
    }

    Qo.Koval.Est[rowno,1] = Koval.fw[rowno,1] * Estimated.Qt.mat[rowno,1]
  }

  Qo.Koval.Est    # Return Estimated matrix
}

vp.kval <- c(100000,1)  #initial estimate
Koval.lb = c(0,0)
Koval.ub = c(Inf,Inf)
n <- 1
Koval.result <- optim(vp.kval,Koval.Error.func, method = "L-BFGS-B",
lower = Koval.lb,
                     upper = Koval.ub, n=n)
print(paste(Koval.result$convergence))
print(paste(Koval.result$par))


Here is the input data:

a:

structure(c(414, 40, 639, 616, 677, 598, 586, 494, 322, 351,
322, 213, 395, 358, 406, 384, 409, 404, 370, 376, 412, 404, 369,
391, 341, 350, 349, 313, 302, 196, 386, 330, 350, 323, 454, 465,
465, 399, 416, 396, 453, 388, 496, 379, 472, 491, 492, 503, 516,
454, 630, 547, 578, 312, 764, 672, 548, 611, 546, 552, 520, 486,
581, 559, 433, 262, 650, 615, 542, 571, 542, 529, 577, 469, 557,
540, 546, 519, 376, 605, 520, 435, 299, 531, 538, 475, 511, 487,
490, 494, 537, 482, 438, 498, 312, 476, 383, 382), .Dim = c(98L,
1L), .Dimnames = list(NULL, "Q2"))

b:

structure(c(2342.12883525675, 2595.06229039124, 2715.2774272809,
2742.14586849367, 2678.48814516156, 2769.17482063132, 2809.26904957691,
2647.26143288146, 2142.48588931211, 1986.26692938822, 2417.80180308667,
2539.99173834861, 2889.68696098066, 2949.03395956634, 3345.265659123,
3178.09552101488, 3202.97894028497, 3294.04615708455, 3273.96002181006,
3290.59294404149, 3074.57078080845, 2809.00966959208, 2870.20594457832,
2994.89960881099, 3031.51083818418, 2838.72778780229, 2779.83367818986,
2471.70302686638, 2277.52074079803, 2313.67080371772, 2415.57558854185,
2593.57170885689, 2579.65222779155, 2542.47630393453, 2610.16334633228,
2715.1622580481, 2680.04491562794, 2676.08878142995, 2890.5657368073,
2939.98447437336, 2932.41354171428, 2699.29100102243, 2748.9757584712,
2885.90115387751, 2841.03004973532, 3111.28842226602, 3293.09352655985,
3448.16679970445, 3470.58231818316, 3077.6191619663, 2892.81263635983,
2563.00601428125, 2410.40833201752, 2696.80369889632, 3250.95996536945,
3900.33363068933, 3571.89127039948, 3569.09158205254, 3718.94141619046,
3963.05018539626, 4317.67764180387, 4143.2306512351, 4482.33003541385,
4313.47162218783, 4162.58533919444, 4119.75974744111, 4080.01960112015,
4146.78116940934, 3848.98992961189, 3507.00912988581, 3336.3269842557,
3691.50683899193, 3616.0923981163, 3325.14304882807, 3471.79805853069,
3229.60965194249, 3106.05768279943, 3184.66721766981, 3140.79657087168,
3242.97205541341, 3090.78617601495, 3086.74973135927, 3317.74000570974,
3594.90929884806, 3716.02759860505, 3622.91307702134, 3793.8518218782,
3666.82966979173, 3779.4557494045, 3750.98605852729, 3333.45681985961,
3057.22984206785, 3395.04273620089, 3623.47886822009, 3690.34495906538,
3827.97665203175, 3933.61679986677, 3762.82354740958), .Dim = c(98L,
1L))

c:

structure(c(2854.17262019504, 91576.5893971961, 171680.262910889,
257565.867448752, 335812.78671975, 424624.296030534, 510229.898689908,
586994.432148103, 636896.230541501, 691311.784820203, 780382.614051205,
860628.109248455, 961649.745761829, 1055011.51571743, 1162113.22730208,
1255164.70993334, 1352077.97513698, 1457172.94644257, 1554726.68952114,
1657279.26732716, 1745523.14071769, 1821000.62788843, 1911979.2340704,
2005954.86455037, 2101129.54803795, 2182822.62676551, 2258661.15941603,
2325202.52364728, 2387098.71588595, 2460005.26984465, 2535846.63352407,
2622071.03988945, 2701584.84087477, 2776628.22472118, 2859757.87551639,
2944689.28669068, 3026621.7086177, 3109451.02390273, 3200463.68736646,
3293220.09008416, 3380941.82063061, 3456992.53009029, 3541106.87910663,
3635049.74483035, 3721653.58199201, 3823940.56521733, 3931974.7704047,
4040554.293988, 4148875.73758196, 4231424.94909108, 4306157.82023537,
4374820.38189491, 4442080.07977206, 4535051.28823047, 4650928.35668784,
4793084.92990124, 4893067.57046614, 5000047.61946087, 5120237.59556207,
5247211.61097682, 5392662.33159569, 5515394.91894634, 5652397.35652795,
5780590.26125026, 5900471.93425283, 6026783.31719041, 6147868.09782702,
6278602.62144284, 6388178.16489299, 6482065.35854026, 6579907.11054506,
6702412.42037957, 6812043.87236422, 6905604.01572694, 7007786.71329603,
7099980.68361161, 7189071.57372477, 7290368.20702837, 7383139.53472758,
7487014.64958016, 7577849.79802546, 7670318.64215094, 7780726.13033402,
7897750.56237753, 8016910.17077053, 8126173.95193153, 8241923.12215802,
8351438.92663496, 8468551.68021943, 8583900.77567578, 8670079.97000769,
8755816.49103472, 8872115.39013376, 8988383.34061776, 9104971.76148562,
9224368.08502439, 9349766.5439318, 9460826.05419725), .Dim = c(98L,
1L))



More information about the R-help mailing list