找回密码
 注册
Simdroid-非首页
查看: 62|回复: 7

用Matlab求解双层规划时遇到的问题

[复制链接]
发表于 2009-4-28 14:19:40 | 显示全部楼层 |阅读模式 来自 重庆沙坪坝区
本帖最后由 ljelly 于 2009-4-28 14:39 编辑

利用Matlab编程采用模拟退火算法求解一个双层规划时遇到了点问题,不知道程序应当怎么改,请高手指教呀,先谢谢了!

程序如下:
>> clear
%模拟退火算法解双层规划
x0=0;T=100;
x=x0;
y=0;
f=F(x,y);
X=x0;X0=x0;Xm=X;Fm=f;k=0;
while k<=100
    u=unifrnd(0,1);
    Z=(1/(u^2)-1)*T;
    Y0=0.5*(X+X0)+Z;
    if Y0>=0&Y0<=15
       Y=Y0;
    else  
       Y=fminbnd(fu(x,Y0),0,15);
    end
    y=fmincon(G(x,z),0,0,sqrt(x),c(x,z));
    y1=fmincon(G(Y,z),0,0,sqrt(Y),c(Y,z));
    f=F(Y,y1);
    r=unifrnd(0,1);
    p=min(1,exp((F(X,y)-f)/T));
    if r<=p
      X=Y;X0=Y0;
      f1=f;
    end
    if f1<Fm
      Xm=X;Fm=f1;
    end
    T=T/(k+1)^2;
    k=k+1;
end
Xm,y,Fm

%辅助规划目标函数
function fun = fu(x,y)
fun=0.5*(x-y)^2;
%上层规划目标函数
function fun1 = F(x,y)
fun1=x^2+(y-1)^2;
%下层规划目标函数
function fun2 = G(x,y)
fun2=(x+2*y-30)^2;
%一个约束条件函数
function fun3=c(x,y)
fun3=x+y^2-20;


出现下面的错误提示:
??? Error using ==> fcnchk at 105
FUN must be a function, a valid string expression,
or an inline function object.
Error in ==> fminbnd at 178
funfcn = fcnchk(funfcn,length(varargin));
发表于 2009-4-28 14:41:10 | 显示全部楼层 来自 浙江杭州
Simdroid开发平台
命令中函数名称前要加@
即将Y=fminbnd(fu(x,Y0),0,15);,改为Y=fminbnd(@fu(x,Y0),0,15);
回复 不支持

使用道具 举报

 楼主| 发表于 2009-4-28 19:42:57 | 显示全部楼层 来自 重庆沙坪坝区
命令中函数名称前要加@
即将Y=fminbnd(fu(x,Y0),0,15);,改为Y=fminbnd(@fu(x,Y0),0,15);
messenger 发表于 2009-4-28 14:41


谢谢你的回答,不过这样改了之后出线了这个错误:
???        Y=fminbnd(@fu(x,Y0),0,15);
                                      |
Error: Unbalanced or unexpected parenthesis or bracket.

不知道还有什么问题,希望能帮帮我,谢了!
回复 不支持

使用道具 举报

 楼主| 发表于 2009-4-30 16:30:26 | 显示全部楼层 来自 重庆沙坪坝区
我定义了一个新变量,然后把那句改为了:Y=fminbnd(@(z)fu(z,Y0),0,15);

在fmincon那里也是z为变量,但出现这样的错误:
??? Error using ==> fmincon at 230
FMINCON only accepts inputs of data type double.

比如y=fmincon(G(x,z),0,0,sqrt(x),c(x,z));  我是想求 (x+2*z-30)^2(x已知)的最小值,其约束为:0<=z<=sqrt(x),且x+z^2-20<=0(即c(x,z)<=0)


请好心人帮帮我吧~,谢谢!
回复 不支持

使用道具 举报

发表于 2009-4-30 21:58:03 | 显示全部楼层 来自 宁夏银川
什么是双层规划啊!你能解释一下么?
回复 不支持

使用道具 举报

 楼主| 发表于 2009-4-30 22:39:11 | 显示全部楼层 来自 重庆沙坪坝区
什么是双层规划啊!你能解释一下么?
wanglei5201118 发表于 2009-4-30 21:58


简单地说就是这个意思:“双层规划是双层决策系统优化的数学模型,它是一种具有二层递阶结构的系统优化问题,上层决策者和下层决策者都有各自的目标函数和约束条件,上层先给定一个决策变量,下层各子系统以这个决策变量为参量,根据自己目标函数和约束条件,在可能的范围内求得一个最优值,并将自己的最佳反应反馈给上层,上层再在下层的最佳反应的基础上,在可能的范围内求得整体上的最优解。”

ps:在解决这个问题之前我也没听说过……

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2009-5-1 01:09:50 | 显示全部楼层 来自 浙江杭州
感觉你的代码写得比较混乱。x、y、z之间指代不清。另外,你的参数有问题,约束条件0<=z<=sqrt(x),但x=x0=0,约束条件就变成了0<=z<=0,显然不对。

你应该再好好看一下fmincon的帮助。

呵呵,其实你的这个问题不难,就眼看就能看出答案,显然z=0时,(x+2*z-30)^2取最小值而且满足约束条件。


我定义了一个新变量,然后把那句改为了:Y=fminbnd(@(z)fu(z,Y0),0,15);

在fmincon那里也是z为变量,但出现这样的错误:
??? Error using ==> fmincon at 230
FMINCON only accepts inputs of data type double ...
helly 发表于 2009-4-30 16:30
回复 不支持

使用道具 举报

发表于 2009-5-1 02:23:45 | 显示全部楼层 来自 浙江杭州
simulannealbnd
matlab自带的模拟退火程序
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-7 09:27 , Processed in 0.038556 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表