失败在最初的用户提供的非线性约束函数评估。FMINCON无法继续。

98(30天)
你好,
我有困难,这个问题已经很长一段时间。我想最小化函数取决于两个矩阵变量的初始值(S和V)。我使用的代码是:
全球Foodprice营养S V ZSum WSum索恩斯冯X0 x
Foodprice = xlsread (“MaxEntropySansCarbs.xlsx”,“Sheet1”,“C2: C22”);
营养= xlsread (“MaxEntropySansCarbs.xlsx”,“Sheet1”,“D2: U22”);
S = xlsread (“MaxEntropySansCarbs.xlsx”,“Z”,Q2: Z19”);
V = xlsread (“MaxEntropySansCarbs.xlsx”,' W ',“R2: AA22”);
ZSum = xlsread (“MaxEntropySansCarbs.xlsx”,“Z”,“O2: O19”);
WSum = xlsread (“MaxEntropySansCarbs.xlsx”,' W ',“P2:第22位”);
SOnes = 1(18日1);
冯= 1(21日1);
X0 = vertcat (S, V);
j = 1:18, 1:10;
k = 19:39 1:10;
objfun {j} {k} = @ (x)和(sum (x (j))) *日志(x (j)) ' +总和(sum (x (k))) *日志(x (k));
ceq1 = @ (x) Foodprice -(总和(营养)的*总和(ZSum) *总和(sum (x (j)))) -WSum *总和(x (k));
ceq2 = @ (x)和(x (j))“儿子”;
ceq3 = @ (x)和(x (k))“-VOnes”;
测查= @ (x) [ceq1; ceq2 ceq3);
选择= optimset (“算法”,“内点”);
fmincon (“objfun”X0, []、[] [], [], [], [],“量表”);
结束
结束
我得到这些警告和错误:
警告:默认trust-region-reflective算法不能解决的问题
约束你有指定的。FMINCON将利用有效集算法。为
信息在适用的算法,请参阅在文档中选择算法。
>在fmincon在486
错误使用函数宏指令
未定义的函数的输入参数“量表”类型“双”。
错误在fmincon(第681行)
[ctmp, ceqtmp] =函数宏指令(confcn {3}, X,变长度输入宗量{:});
引起的由:
失败在最初的用户提供的非线性约束函数评估。FMINCON
不能继续下去。
我不确定如果我编码矩阵的选择变量错误或者什么。任何帮助将是非常赞赏。

答案(3)

艾伦·韦斯
艾伦·韦斯 2012年11月14日
你遇到了一些问题。一个非线性约束函数必须返回不等式约束和等式约束。看到 的文档 。编写一个函数文件,cfunction说。米,输出c和量表。
同样,你不通过你的选择,即使你创建它们。你必须通过选择作为最后一个参数:
[x, fval] = fmincon (“objfun”X0, []、[] [], [], [], [], @cfunction,选项);
我不是100%确定我理解你的循环,你为什么给不同objfun循环的每一步?也有可能是一个错误。
祝你好运,
艾伦·韦斯
MATLAB数学工具箱文档

沃尔特·罗伯森
沃尔特·罗伯森 2012年11月14日
改变
fmincon (“objfun”X0, []、[] [], [], [], [],“量表”);
fmincon (“objfun”X0,[]、[][],[],[],[],测查);
你只能传递一个函数的名字如果函数在MATLAB的m文件路径。

阿里软件
阿里软件 2020年10月16日
你好,我是试图用x作为变量优化operator_profit以下代码。我的新编码和试图解决,相当长时间内,但我得到以下错误:
错误
Main_code3 > @ (x) confun (x,需求,θ,passenger_flow,α,car_probability,β,a0, distance_travelled, bus_fare, bus_fuel_cost, car_travelling_cost_const)
错误在fmincon(第633行)
[ctmp, ceqtmp] =函数宏指令(confcn {3}, X,变长度输入宗量{:});
错误在Main_code3(50行)
[x, fval exitflag] = fmincon (Aeq operator_profit x0, A, b,说真的,磅,乌兰巴托,confunxval);
引起的由:
失败在初始非线性约束函数评估。FMINCON无法继续。
虽然,我的主要代码:
清晰的
clc
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - %
%的参数设置
θ= 0.1;
需求= 5000;
α= 500;
β= 400;
bus_fare = 100;
bus_fuel_cost = 200;
car_travelling_cost_const = 1000;
distance_travelled = 10;
a0 = 4000;
x = [];
%计算的数学表达式
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - %
bus_probability = exp(θ* ((1. / x) *α+β+ bus_fare))
/ (exp(θ* ((1. / x) *α+β+ bus_fare)) + exp(θ* car_travelling_cost_const));
car_probability = exp(θ* car_travelling_cost_const)。/ (exp(θ* car_travelling_cost_const)
+ exp(θ* ((1. / x) *α+β+ bus_fare)));
passenger_flow = * bus_probability需求;
bus_operation_cost = a0 + distance_travelled * bus_fuel_cost;
%目标函数最大化巴士运营商的利润
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - %
operator_profit = @ (x)
(需求。*
(exp(θ* ((1. / x) *α+β+ bus_fare))
/ (exp(θ* ((1. / x) *α+β+ bus_fare)) + exp(θ* car_travelling_cost_const)))
* (distance_travelled * bus_fare)
- ((a0 + distance_travelled * bus_fuel_cost) * x));
真正的(operator_profit (20))
一个= [];
b = [];
Aeq = [];
说真的= [];
磅= 1;
乌兰巴托= 200;
x0 = 4;
confunxval = @ (x) confun (x,需求,θ,passenger_flow,α,car_probability,β,a0, distance_travelled, bus_fare, bus_fuel_cost, car_travelling_cost_const);
[x, fval exitflag] = fmincon (Aeq operator_profit x0, A, b,说真的,磅,乌兰巴托,confunxval);
感谢的帮助。谢谢你!

类别

找到更多的在和迭代解算器输出显示帮助中心文件交换

标签

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!