Thiết lập chức năng là tầm thường:
fr <- function(x) { x1 <- x[1]
x2 <- x[2]
-(log(x1) + x1^2/x2^2) # need negative since constrOptim is a minimization routine
}
Thiết lập ma trận hạn chế là có vấn đề do thiếu các tài liệu nhiều, và tôi đành để thử nghiệm. Trang trợ giúp cho biết "Vùng khả thi được xác định bởi ui% *% theta - ci> = 0". Vì vậy, tôi đã kiểm tra và điều này dường như để "làm việc":
> rbind(c(-1,-1),c(1,0), c(0,1)) %*% c(0.99,0.001) -c(-1,0, 0)
[,1]
[1,] 0.009
[2,] 0.990
[3,] 0.001
Vì vậy, tôi đặt trong một hàng cho mỗi chế/ranh giới:
constrOptim(c(0.99,0.001), fr, NULL, ui=rbind(c(-1,-1), # the -x-y > -1
c(1,0), # the x > 0
c(0,1)), # the y > 0
ci=c(-1,0, 0)) # the thresholds
Đối với vấn đề này có một khó khăn tiềm tàng trong đó cho tất cả các giá trị của x chức năng đi đến Inf là y -> 0. Tôi nhận được một tối đa xung quanh x = .95 và y = 0 ngay cả khi tôi đẩy các giá trị bắt đầu ra đến "góc", nhưng tôi hơi nghi ngờ rằng đây là không phải là mức tối đa thực sự mà tôi đoán là ở "góc". EDIT: Theo đuổi này, tôi lập luận rằng gradient có thể cung cấp thêm "chỉ đạo" và bổ sung thêm một chức năng gradient:
grr <- function(x) { ## Gradient of 'fr'
x1 <- x[1]
x2 <- x[2]
c(-(1/x[1] + 2 * x[1]/x[2]^2),
2 * x[1]^2 /x[2]^3)
}
này đã "chỉ đạo" việc tối ưu hóa một chút gần gũi hơn với các c (0,999 ..., 0) góc, thay vì di chuyển ra khỏi nó, như nó đã làm cho một số giá trị bắt đầu. Tôi vẫn hơi thất vọng rằng quá trình này dường như "đầu cho vách đá" khi các giá trị bắt đầu là gần trung tâm của khu vực khả thi:
constrOptim(c(0.99,0.001), fr, grr, ui=rbind(c(-1,-1), # the -x-y > -1
c(1,0), # the x > 0
c(0,1)), # the y > 0
ci=c(-1,0, 0))
$par
[1] 9.900007e-01 -3.542673e-16
$value
[1] -7.80924e+30
$counts
function gradient
2001 37
$convergence
[1] 11
$message
[1] "Objective function increased at outer iteration 2"
$outer.iterations
[1] 2
$barrier.value
[1] NaN
Lưu ý: Hans Werner Borchers gửi một ví dụ tốt về R-Help rằng đã thành công trong việc nhận các giá trị góc bằng cách đặt ràng buộc hơi xa mép:
> constrOptim(c(0.25,0.25), fr, NULL,
ui=rbind(c(-1,-1), c(1,0), c(0,1)),
ci=c(-1, 0.0001, 0.0001))
$par
[1] 0.9999 0.0001
@G và những người khác - ai đó có thể giải thích lý do tại sao đăng chéo không được? Nó có thể được chấp nhận để đề cập đến rằng bạn đang chéo gửi bài với một liên kết? Tôi không có cảm xúc mạnh mẽ theo cách này hay cách khác, nhưng một số rõ ràng về vấn đề này có thể được bảo đảm. Nếu đây là thứ mà cộng đồng R ở quy mô lớn đã xử lý trước đây, tôi đoán việc liên kết với các cuộc thảo luận đó sẽ là một khởi đầu tốt. – Chase
Nếu bạn thực hiện tìm kiếm trên tab Meta cho "cross posting", bạn tìm thấy nhiều ý kiến khác nhau, hầu hết nó đều tương đối chấp nhận đối với việc đăng tải chéo. (Tuy nhiên, việc đăng quảng cáo đồng thời dường như làm phiền hầu hết mọi người.) Có một đạo đức chống chéo mạnh mẽ trên các nhóm trợ giúp và người anh em họ do R-Help Posting Guide đặt ra. Tôi gặp khó khăn khi nhìn thấy Hướng dẫn đăng bài như đang được thử nghiệm trong SO. –
@Chase Khi mọi người vượt qua bài đăng và không cho bất kỳ ai biết rằng sau đó có thể ai đó viết ra giải pháp cho một vấn đề đã được giải quyết có thể lãng phí thời gian của họ. Cá nhân tôi không quan tâm nếu mọi người vượt qua bài viết miễn là họ làm cho nó được biết đến (và nó không quá mức). – Dason