Konfiguracja funkcji trywialny:
fr <- function(x) { x1 <- x[1]
x2 <- x[2]
-(log(x1) + x1^2/x2^2) # need negative since constrOptim is a minimization routine
}
Konfiguracja macierzy ograniczenie było problematyczne ze względu na brak wiele dokumentacji i ucieka się do eksperymentów. Strona pomocy mówi "Możliwy region jest zdefiniowany przez ui% *% theta - ci> = 0". Więc przetestowane i wydawało się, że „praca”:
> 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
więc umieścić w rzędzie dla każdego więzów/granicy:
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
tego problemu istnieje potencjalne trudności w tym, że dla wszystkich wartości z x funkcja idzie do Inf jako y -> 0. Mam max około x = .95 i y = 0, nawet gdy wypycham wartości wyjściowe do "rogu", ale jestem nieco podejrzany, że to jest nie prawdziwym maksimum, które mogłem odgadnąć było w "rogu". EDIT: Zajmując to ja uznał, że gradient może dostarczyć „kierunek” i dodaje dodatkową funkcję 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)
}
To nie „wół” optymalizacji nieco bliżej C (.999 ... 0) narożnik, zamiast odsuwać się od niego, tak jak w przypadku niektórych wartości początkowych. I pozostanie nieco rozczarowany, że proces wydaje się „głowa do urwiska”, gdy wartości wyjściowe są blisko centrum regionu to wykonalne:
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
Uwaga: Hans Werner Borchers napisali lepszy przykład na R-help że udało się uzyskać wartości narożne, nieznacznie ustawiając ograniczenie od krawędzi:
> 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 i inne - czy ktoś może wyjaśnić, dlaczego krzyżyk jest marszczony? Czy byłoby dopuszczalne, aby wspomnieć, że jesteś przekierowany z linkiem? Nie mam silnych uczuć w ten czy inny sposób, ale pewna jasność w tej kwestii jest prawdopodobnie uzasadniona. Jeśli to jest coś, co wcześniej zajmowała się społeczność R, myślę, że połączenie z tymi dyskusjami byłoby dobrym początkiem. – Chase
W przypadku wyszukiwania w zakładce Meta w celu "przeksięgowania" można znaleźć różne opinie, z których większość jest względnie akceptowana w celu przeksięgowania. (Jednoczesne przekierowanie zdaje się jednak irytować większość ludzi). Istnieje silna etyka anty-cross-postingowa dla grup r-help i kuzynów, które zostały określone w przewodniku po publikacji R-Help. Trudno mi się przekonać, że Przewodnik wysyłkowy jest dowodem w języku SO. –
@Chase Gdy ludzie przechodzą przez post i nie pozwalają nikomu o tym wiedzieć, to jest możliwe, aby ktoś napisał rozwiązanie problemu, który jest już rozwiązany, co może być stratą czasu. Osobiście nie dbam o to, czy ludzie przekraczają posty, o ile je ujawniają (i nie są nadmierne). – Dason