Вы решаете разные модели.
res = linprog(obj_func, constraints, rhs, method="interior-point", options={"disp":True})
означает
res = linprog(obj_func, A_ub=constraints, b_ub=rhs, method="interior-point", options={"disp":True})
, действующие в ограничениях:
x0 <= 0.4498162176582741
...
вместо
x0 == 0.4498162176582741
Поэтому linprog использует неравенства только тогда, когда lpsolve использует только равенства (без проверки, выполняет ли f.dir = c("=","=","=","=")
то, что, я думаю, делает; но результат показывает это более или менее).
Результат linprog:
x: array([4.34463075e-10, 4.34463075e-10, 6.03369494e-10])
является типичным выходом нулевого вектора метода внутренней точки (только приближенные интегральные решения)! В отличие от коммерческих решателей, таких как Gurobi , здесь нет шага кроссовера.
Будьте внимательны при чтении документов (которые содержат эту информацию).
Существует простое решение: Начиная с Grails 1.1 Преобразователи были переписаны, чтобы быть более модульными. К сожалению, я не закончил документацию для этого. Это позволяет теперь регистрировать так называемый ObjectMarshallers (простой Pogo/Pojo's, которые реализуют org.codehaus.groovy.grails.web.converters.marshaller.ObjectMarshaller
интерфейс).
Для достижения желаемого вывода Вы могли зарегистрировать такой ObjectMarshaller в BootStrap.groovy тот путь:
import grails.converters.JSON;
class BootStrap {
def init = { servletContext ->
JSON.registerObjectMarshaller(Date) {
return it?.format("dd-MM-yyyy")
}
}
def destroy = {
}
}
Существует несколько других способов настроить вывод Преобразователей, и я приложу все усилия, действительно догоняют документацию как можно скорее.
Или вы можете работать на самом уровне даты. Это может быть не совсем то, что вы хотите, но это может вызвать идею для решения, которое будет работать последовательно во всем приложении.
def doWithDynamicMethods = {ctx ->
def customDateToString = {->
def dateFormat = "dd MMM yyyy"
def timeFormat = "hh:mm:ss a"
def timeCheck = new java.text.SimpleDateFormat("hh:mm:ss SSS a")
def formattedTime = timeCheck.format(delegate)
def formatString = dateFormat
if (formattedTime != "12:00:00 000 AM")
formatString = "$formatString $timeFormat"
def formatter = new java.text.SimpleDateFormat("$formatString")
formatter.format(delegate)
}
Date.metaClass.toString = customDateToString;
java.sql.Timestamp.metaClass.toString = customDateToString;
}