Intereting Posts
Поддержка макросов в оснащении Как сохранить имя пользователя и пароль из моего приложения в мою базу данных и как подключить мое приложение к моей базе данных? Kotlin: Функции более высокого порядка для подсчета количества вхождений в List? Kotlin kotlinClass.class.getName () не может вернуть имя пакета, но только простое имя класса Kotlin: как передать массив в аннотацию Java Kotlin: Как сделать меню панели инструментов с помощью Anko DSL? Разница между !! а также ? в Котлине Kotlin TypeToken Ошибка «Неразрешенная ссылка» notifyDataChanged () не удалось обновить данные расширяемого списка Как передать строку в var без escape-символа в Котлине? Как установить метод тестового презентатора на основе возвращаемого значения Observable? KMango: обновить коллекцию с помощью col.updateOne / col.updateMany Как я могу вызвать методы Kotlin с помощью reified generics из Java? Как перегружать конструкторы в котлин отличается в лямбда-обратном типе Анко. Выполнение изменений асинхронного макета

Как использовать apache SimplexOptimizer с nelder-mead

Это простая оптимизация для оценки веса.

для оценки веса следующих пяти дней с записью в пять дней.

Я создал такую ​​модель (-> http://www.wolframalpha.com/input/?i=y+%3D+(c%2F(1%2Be%5E(ax%2Bb)))%2Bd ), и я хотите найти для него четыре параметра.

x – последовательность дат

y – вес.

мой код такой.

// http://www.wolframalpha.com/input/?i=y+%3D+(c%2F(1%2Be%5E(ax%2Bb)))%2Bd // err function : y-(c/(1+e^(ax+b)))+d // ... given x, y // ... find a,b,c,d /* calendar = Calendar.getInstance() val wholeProgress = stringToCalendar(item.desireDate)!!.time.time - stringToCalendar(item.startDate)!!.time.time val nowProgress = calendar.time.time - stringToCalendar(item.startDate)!!.time.time val realXY = arrayOf( Pair(1,80.0), Pair(2,79.0), Pair(3, 78.7), Pair(4, 79.0), Pair(5, 76.2)) val guessA = 0.01 val guessB = -0.01 * item.startWeight val guessC = (maxWeight-minWeight) / (wholeProgress/nowProgress) * 2 val guessD = item.startWeight - guessC / 2 */ class MyErrorFunction : MultivariateFunction{ fun realFunction(x: Int, point: DoubleArray): Double{ val a = point[0] val b = point[1] val c = point[2] val d = point[3] // real function is below return (c / (1 + Exp().value(a * x + b))) + d } override fun value(point: DoubleArray?): Double { point!! val a = point[0] val b = point[1] val c = point[2] val d = point[3] var sum = 0.0 // find optimize from given x, y for(xy in realXY){ val x = xy.first.toDouble() val y = xy.second sum += Pow().value((y - (c / (1 + Exp().value(a * x + b)))+d), 2.0) } return sum } } val optimum = SimplexOptimizer(1e-2, 1e-5) .optimize( MaxEval(100000000), ObjectiveFunction(MyErrorFunction()), GoalType.MINIMIZE, InitialGuess( doubleArrayOf(guessA, guessB, guessC, guessD) ), NelderMeadSimplex(4) ) val ref = optimum.point for(i in 1 until 10){ // this is for android log. // 1~5 is must be approximated arrayOf( // Pair(1,80.0), Pair(2,79.0), Pair(3, 78.7), // Pair(4, 79.0), Pair(5, 76.2)) // 6~9 is estmiate value. Log.d(TAG, "$i : ${MyErrorFunction().realFunction(i, ref)} when ${ref[0]} ${ref[1]} ${ref[2]} ${ref[3]}") } 

и я видел это

1: 54.02576079362645, когда -86.35794700386404 -174.84205748780514 66.33391736809043 -12.308156574463972

2: 54.02576079362645, когда -86.35794700386404 -174.84205748780514 66.33391736809043 -12.308156574463972

3: 54.02576079362645, когда -86.35794700386404 -174.84205748780514 66.33391736809043 -12.308156574463972

4: 54.02576079362645, когда -86.35794700386404 -174.84205748780514 66.33391736809043 -12.308156574463972

5: 54.02576079362645, когда -86.35794700386404 -174.84205748780514 66.33391736809043 -12.308156574463972

6: 54.02576079362645, когда -86.35794700386404 -174.84205748780514 66.33391736809043 -12.308156574463972

7: 54.02576079362645, когда -86.35794700386404 -174.84205748780514 66.33391736809043 -12.308156574463972

8: 54.02576079362645, когда -86.35794700386404 -174.84205748780514 66.33391736809043 -12.308156574463972

9: 54.02576079362645, когда -86.35794700386404 -174.84205748780514 66.33391736809043 -12.308156574463972

Я думаю, что моя функция не работает точно.

как я могу это решить …?

Solutions Collecting From Web of "Как использовать apache SimplexOptimizer с nelder-mead"