与两个变量非线性优化,1变量总是等于极限

4视图(30天)
我们正在致力于一个项目,需要通过优化焊接项目的成本最小化项目焊工的用量以及天项目需要的数量。我们目前遇到一个问题,焊工的用量将无穷,并将始终等于我们所设定的上限。这是我们优化方程,以及约束和调用fmincon
清晰;
clc;
0 x0 = [0];
%可能输入%
最后期限= 30;
upperBounds =(15期限);
%设置默认的解算器选项
选择= optimoptions (“fmincon”,“PlotFcn”,“optimplotfvalconstr”);
%解决
(解决方案,objectiveValue) = fmincon (@objectiveFcn, x0, []、[] [], [],
0(大小(x0))、upperBounds @constraintFcn,选项);
%明显的变量
clearvars选项
clc;
disp(解决方案);
disp (objectiveValue);
函数f = objectiveFcn (optimInput)
但是现在临时值%的输入
workHours = 10;
paidHours = 11;
重量= 15000;
过剩= 6;
进程= 2;
welderCost = 523.41;
helperCost = 467.32;
laborerSkilledCost = 467.32;
stabberCost = 450.87;
spacerO16Cost = 450.87;
operatorCost = 576.98;
foremanCost = 756.76;
strawBossCost = 643.35;
clampmanCost = 450.87;
qaqcCost = 678.24;
pipelayerCost = workHours * 124.54;
贷款= 175;
焊工= optimInput (1);
天= optimInput (2);
constcrew = 8;%稻草,领班2衬垫、锥子clampman 2操作符
f =天*(焊工* welderCost +焊工* helperCost +(焊工/ 3)* laborerSkilledCost
+ foremanCost + strawBossCost + stabberCost + 2 * spacerO16Cost +进程* qaqcCost
+ clampmanCost + 2 * pipelayerCost + 2 * operatorCost +(焊工* 2 + constcrew +(焊工/ 3)+进程)*贷款);
结束
函数测查[c] = constraintFcn (optimInput)
%,如果没有不等式约束,指定c = []
%,如果没有等式约束,指定测查= []
eff = 5;
焊缝= 1000;
焊工= optimInput (1);
天= optimInput (2);
c = [];
测查=(焊工*天* eff) -焊接;
结束
我们将最优方程天之间找到最佳平衡和焊工,不仅最大化数量的焊工。我们优化了,有没有更好的方法?
编辑添加完整代码
3评论
米伦命名为
米伦命名为 2021年5月20日
编辑:米伦命名为 2021年5月20日
@Matt J 这是整个程序,我们的正常程序使用分离函数来确定成本基于我们的数据库,我们有填写变量与随机值相反,所以我们不需要包括一个excel的数据表和多个分离功能。这些功能都完美,问题不是。
清晰;
clc;
0 x0 = [0];
%可能输入%
最后期限= 30;
upperBounds =(15期限);
%设置默认的解算器选项
选择= optimoptions (“fmincon”,“PlotFcn”,“optimplotfvalconstr”);
%解决
(解决方案,objectiveValue) = fmincon (@objectiveFcn, x0, []、[] [], [],
0(大小(x0))、upperBounds @constraintFcn,选项);
%明显的变量
clearvars选项
clc;
disp(解决方案);
disp (objectiveValue);
函数f = objectiveFcn (optimInput)
但是现在临时值%的输入
workHours = 10;
paidHours = 11;
重量= 15000;
过剩= 6;
进程= 2;
welderCost = 523.41;
helperCost = 467.32;
laborerSkilledCost = 467.32;
stabberCost = 450.87;
spacerO16Cost = 450.87;
operatorCost = 576.98;
foremanCost = 756.76;
strawBossCost = 643.35;
clampmanCost = 450.87;
qaqcCost = 678.24;
pipelayerCost = workHours * 124.54;
贷款= 175;
焊工= optimInput (1);
天= optimInput (2);
constcrew = 8;%稻草,领班2衬垫、锥子clampman 2操作符
f =天*(焊工* welderCost +焊工* helperCost +(焊工/ 3)* laborerSkilledCost
+ foremanCost + strawBossCost + stabberCost + 2 * spacerO16Cost +进程* qaqcCost
+ clampmanCost + 2 * pipelayerCost + 2 * operatorCost +(焊工* 2 + constcrew +(焊工/ 3)+进程)*贷款);
结束
函数测查[c] = constraintFcn (optimInput)
%,如果没有不等式约束,指定c = []
%,如果没有等式约束,指定测查= []
eff = 5;
焊缝= 1000;
焊工= optimInput (1);
天= optimInput (2);
c = [];
测查=(焊工*天* eff) -焊接;
结束
运行这个程序将永远给你15个焊工的最大约束,同时使天尽可能低(13.3333在这种情况下)。如果我们的焊工,它将把它的10000年的焊工(永远继续运行,我们可以设置一个下界的1天,但它只会减少1天,这显然不是什么clsoe现实),为了让天尽可能小

登录置评。

答案(1)

艾伦·韦斯
艾伦·韦斯 2021年5月21日
你的问题有成本的问题变量的形式
成本=天*焊工*积极+天* positive2;
在这里 积极的 positive2 都是正的常数。你可以写约束
天*焊工= positive3;
因此,你的问题设置显然最小成本的最小值 :
成本= positive3 * * positive2积极+天;
你经历的问题不是一个故障解决方案的方法,但问题的定义。
得到不同的结果,你必须给不同的成本。
艾伦·韦斯
MATLAB数学工具箱文档

类别

找到更多的在多目标优化帮助中心文件交换

s manbetx 845


释放

R2021a

社区寻宝

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

开始狩猎!

翻译的