条件语句使用优化变量怎么办?
25日视图(30天)
显示旧的评论
神经网络
2021年5月4日
嗨,我可以使用优化变量执行逻辑比较吗?
我试过下面这个代码优化使用PbattV优化变量,但错误:
成本=科斯塔。* (PbattV < = 200) + Costb。* (PbattV > = 200);
P1成本= dt *的* PbattV;
P2成本= dt *的* PbattV;
P = P1-P2;
概率。ObjectiveSense =“最小化”;
概率。目标= P;
运行时发生一个错误造成的模拟和仿真终止:*请帮助如果你有任何的建议
基本上我需要检查如果Pbatt是积极的还是消极的,因此我不得不选择成本和使用目标函数;
0评论
接受的答案
沃尔特·罗伯森
2021年5月4日
成本=科斯塔。* (PbattV < = 200) + Costb。* (PbattV > = 200);
优化变量不能被转换为逻辑值。唯一一次可以比较一个优化变量的值构造一个约束。
放弃尝试代码的比较运算符:
不
成功。
如果有一个解决方案,那么它将涉及使用数学技巧如sqrt (x ^ 2) / x的迹象(x)
17日评论
神经网络
2021年7月18日
有可能给如果目标函数的条件吗?
Obj函数最大化:
概率。目标价格= dt * * Pnet - dt *成本的Ppv *;
如果Pnet是正的,应该是:
概率。目标成本= dt * Price1 * Pnet - dt *的* Ppv;
如果Pnet是负的,应该是:
概率。目标成本= dt * Price2 * Pnet - dt *的* Ppv;
有可能给这样的两个方程,它是如何计算有效的概率。客观吗?
我有两个价格,包括根据Pnet的迹象
请advcie
神经网络
2021年7月19日
在以下示例中,
一个电池被认为是和optimproblem被定义。如果有一个电池,它可以定义两个optimproblem喜欢
概率= optimproblem;
prob1 = optimproblem;
如果这是正确的格式吗?请建议
神经网络
2021年8月17日
如果我需要计算分解成三部分,像三个功能是分开的。我怎么优化代码中调用这些函数?请建议我还是困了这个问题。
基于每个函数,它将检查Pnet的标志和加载相应的成本,然后优化程序过程中应采取相应值的函数。
神经网络
2021年8月18日
编辑:沃尔特·罗伯森
2021年8月18日
请参见以下代码:它返回的值是0,我期待的500年e3和输出
Pbattups
。请建议。
函数[Pd, Pbattups Ebattups] = battSolarOptimizetrial3 (N, dt, Ppv、Pload Einit,成本,FinalWeight, upsbatteryMinMax)
概率= optimproblem;
%决策变量
刚才= optimvar (“刚才”N);
PbattupsV = optimvar (“PbattupsV”N下界的0,“UpperBound”500年e3);
EbattupsV = optimvar (“EbattupsV”N下界的upsbatteryMinMax.Emin,“UpperBound”,upsbatteryMinMax.Emax);
%的利润最大化的使用电池和光伏
概率。ObjectiveSense =“最小化”;
%概率。目标= var1 dt * DayaheadCost ' * Ppv-FinalWeight * EbattupsV (N) -FinalWeight * Ebatt1V (N) -FinalWeight * Ebatt2V (N);
概率。目标成本= dt * * PbattupsV - dt *成本的* Ppv-FinalWeight * EbattupsV (N);
%电力输入/输出电池
prob.Constraints。energyBalance = optimconstr (N);
prob.Constraints.energyBalance (1) = EbattupsV (1) = = Einit;
prob.Constraints.energyBalance (2: N) = EbattupsV (2: N) = = EbattupsV (1: N - 1) - PbattupsV (1: N - 1) * dt
从光伏%满足电力负荷与权力,网格和电池
prob.Constraints。Ppv loadBalance = +刚才+ PbattupsV = = Pload;
% prob.Constraints。battpower = PbattupsV < = 500年e3;
%解决线性规划
选择= optimoptions (prob.optimoptions,“显示”,“没有”);
(价值观、~ exitflag) =解决(概率,“选项”、选择);
%解析optmization结果
如果exitflag < = 0
Pd = 0 (N, 1);
Pbattups = 0 (N, 1);
Ebattups = 0 (N, 1);
其他的
Pd = values.PdV;
Pbattups = values.PbattupsV;
Ebattups = values.EbattupsV;
结束
沃尔特·罗伯森
2021年8月18日
PbattupsV = optimvar (“PbattupsV”N下界的0,“UpperBound”500年e3);
^
失踪的操作符之间的选择和价值。代码将不会运行。
我没有任何变量的值传递,所以我不能运行代码来测试它。
神经网络
2021年8月18日
条件语句,而是我可以在函数调用另一个函数,所以它比较并返回值(根据符号)。比较函数就像下面写的
函数价格(成本)= (LBMPCost利润,Pbattups)
如果Pbattups > 0
成本= LMPCost;
elseifPbattups < 0
成本= DayaheadCost;
其他的
成本= 0;
结束
如果是这样,我怎么调用这个函数,所以在bjective函数,它按照比较成本和执行相应的?
请advcie
神经网络
2021年8月19日
先生,请看这个链接,我已经详细发布它。
//www.tianjin-qmedu.com/matlabcentral/answers/1436322-battery-storage-optimisation-problem_charge-and-discharge-conditional-constraint-nested-function_jn
沃尔特·罗伯森
2021年8月19日
不,那是不可能的。它将永远是可能的。
MATLAB目前不支持一个优化变量的符号()。万博1manbetx这是一个产品限制在当前的版本中。我不知道任何原因标志()无法实现的未来,它可能需要工作,但是我认为这是可以做到的——它不是太不同了
一些
方法从支持Pbatt万博1manbetxupsV ^ 2 / PbattupsV (abs (PbattupsV) PbattupsV = = 0时除外)
的方式建立一个基于问题的优化工作,创建优化变量创建一个特殊的类的变量,和算术运算(及相关操作)类的变量记录一个“历史”的操作要求进行,但是没有计算实际值。当你最终调用解决(),优化器分析操作对象的历史和有效地生成代码和数据结构,给出数值参数,进行这些操作;然后问一个优化等功能fmincon执行生成的代码与生成的数据(如生成一个Aeq beq矩阵)。基于问题的优化不扩展的可以做什么样的优化:基于问题的优化是一种方便人们用它创建先进系统自动生成调用现有的优化功能。
当你创建一个基于问题的优化,可以似你调用一个用户定义的函数代码。会发生什么当你是用户定义的函数被调用时传入的优化变量,就像之前所请求的数学操作的历史记录。函数实际上不会被称为数字参数:MATLAB相反会有效地提取公式所实现的功能。
认为系统有许多相似之处使用象征性的符号工具箱通过变量:您可以轻松
信谊x
y = my_function (x)
y =
y =
函数y = my_function (x)
y = x ^ 2 / (cos (x) + sin (x))
结束
当你做什么,每一步的符号工具箱都是记录历史的请求的行动;在这个例子中,my_function
不
将会调用一个数字x,它只会被称为一个象征性的x,这叶子的要求计算和记录是调用函数的结果;结果是
不
计算值在一个特定的数字x。
因此,优化变量,您可以调用你自己的函数。这本身不是一个问题。然而,就像在你的主要行代码,你怎么处理函数内的变量被限制操作,MATLAB知道如何计算的历史记录,以及
不
被要求做任何决定,基于特定的输入值。
现在你提出
函数价格(成本)= (LBMPCost利润,Pbattups)
如果Pbattups > 0
Pbattups在哪一个优化变量。这可以通过咨询处理请求的记录计算的Pbattups吗?没有——或者至少不是很经常。例如如果Pbattups的下限是100然后假设MATLAB可以证明Pbattups > 0都是真的…但不是一般。但是,
如果
声明要求计算(Pbattups > 0)是一个逻辑可决定的真或假为了MATLAB能够知道是否执行的主体
如果
与否。优化系统
不
能的过程,
如果
/
elseif
在某种条件构造
在将来的某个时候当实际数值
请求的操作。
…并且记住,Pbattups N个变量是一个矢量。假设,计算被记录的历史需要一个测试吗
所有
元素Pbattups大于0,或者应该是程序中的元素基础上,做的主体部分Pbattups大于0,做部分的elseif Pbattups不大于0,但小于0,等等?当然,可能
也许
有可能建立在结构处理记录的历史条件计算……但这是永远不会发生的基于自动转换
如果
/
elseif
构造。这将是一个不同的构造……类似于符号工具箱分段()操作。
我写道,我想早些时候签署()在未来可以实现。但它不会简单——出于同样的原因,abs()不会是简单的,和同样的理由,分段()不会是简单的:
麻烦在于,所有支持的优化,使用的数学要求可微分表达式。万博1manbetx具体问题具体分析优化自动寻找衍生品,为了构建梯度。但是…abs()和()和分段标志()没有连续的衍生品。所以,虽然我说我认为优化
可以
被扩展来处理信号(),这将是一个大量的工作,为优化器必须重写以处理不连续的衍生品。
回顾一下:
基于问题的优化是不会处理
如果
或
elseif
。如果它
是
曾经扩展到处理
(标志)
那么就需要一个公平为Mathworks工作。
沃尔特·罗伯森
2021年8月19日
早些时候我建议使用三个版本的代码,一个为负,一个正面,一个零。
当时我的建议,我正在考虑在存在一个标量变量,您需要测试。
如果你需要测试N个不同的变量,像你
optimvar (PbattupsV, N,下界,0,“UpperBound”, 500年e3);
然后你需要
不同运行而不是三种不同运行,除非你被发现能够减少一些案件中,两个条目必须有相同的信号。
沃尔特·罗伯森
2021年8月21日
当你有不连续的衍生品,MATLAB支持的选择是:万博1manbetx
- ga ()
- patternsearch ()
- particleswarm ()
- surrogateopt ()//www.tianjin-qmedu.com/help/gads/surrogateopt.html
- simulannealbnd ()//www.tianjin-qmedu.com/help/gads/simulannealbnd.html
更多的答案(0)
一个错误发生
无法完成的行动,因为页面所做的更改。重新加载页面更新状态。
你也可以从下面的列表中选择一个网站
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。