楼主: zwjcandy
14832 8

约束中带分段线性函数的matlab最优化问题求解 [推广有奖]

  • 0关注
  • 0粉丝

初中生

80%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
253 点
帖子
25
精华
0
在线时间
4 小时
注册时间
2008-4-4
最后登录
2016-4-16

楼主
zwjcandy 发表于 2008-4-17 10:01:00 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
matlab求解最优化问题。
目标函数是线性的。约束是线性的,但有个分段线性函数C(x)=ax+b,x<u(常数);dx,x>u.这个分段函数在等式和不等式约束中都用到了.
我想用数学优化工具箱,是不是可以创个M文件,自定义函数,function [G,ceq]=confun() if...elseif...end 然后再用fmincon调用这个函数.
急!这样能求出来吗?请大家指点! 非常感谢!

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:MATLAB atlab 最优化问题 matla 问题求解 MATLAB 函数 最优化 线性 问题求解

沙发
zwjcandy 发表于 2008-4-17 13:27:00

或者具体的分段函数简化是C(x)=0.4x+b,x<=u;0.6x,x>u. 其中0.4u+b=0.6u. 那C(x)可以写成max(0.4x+b,0.6x)对吗? matlab里有实现这个函数的办法么?

快来人帮帮忙咧,论文要交了,不知道怎么弄啊!急ing...

藤椅
dingd 发表于 2008-4-18 23:19:00
找个1stOpt,很容易处理这种问题。

板凳
zwjcandy 发表于 2008-4-19 09:42:00

不好意思,没用过那软件。 请问楼上有这种书籍吗?

我现在准备用Lingo试试看

报纸
aris_zzy 发表于 2008-4-19 14:05:00

自己可以写个程序 想个算法结构就行了

具体分段函数 有很多种 没有通用的算法 不过GA 结果应该不错

http://www.ariszheng.com

地板
zwjcandy 发表于 2008-5-2 20:40:00

不用遗传算法解。加入0,1变量转化成线性规划模型,用lingo9。0写了程序,但求解时老出现“Error code: 1017”改了好久都弄不出结果来,非常之郁闷。

坛子里有哪位大哥大姐对lingo比较熟,请帮忙指教下好吗?MSN: zwjcandy@hotmail.com.  谢谢先!

7
zwjcandy 发表于 2008-5-3 16:40:00

程序贴出来了,实在奈何不了它,请帮忙看哪里错误,谢谢了哈!

station我取250个,但贴出来时为了简便,只用了5个,相应y(i,j)就只有8行5列了。还是出现“Error code: 1017”,LINGO Solver Status显示Variables只有一个,Model没有显示,State:Unknown。。。

MODEL:
CVaR优化;
SETS:
capital/1..8/: q,x0,e,x,u,v,c;
station/1..5/: z;
points/1,2,3/;
linkI(capital,station): y;
linkII(points,capital): s,r;
ENDSETS
DATA:
n=0.95;
w=0.00294836;
q=25.73 9.38 17.82 38.27 17.4 11.35 22.95 13;
x0=1500 1500 1500 1500 1500 1500 1500 1500;
e=0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2;
y=-0.00930851 -0.00939597 0.07452575 -0.05422446 0.04266667
  -0.00172414 -0.04145078 0.01261261 -0.03558719 0.04059041
     0.002849 -0.03551136 -0.00589102 -0.04888889 0.04205607
  -0.01478953 0.02713626 0.03428893 -0.04728261 0.02909298
   0.00712251 -0.00141443 0.03541076 -0.03419973 0.03966006
  -0.00879765 0.10059172 0.05645161 -0.08142494 0.08033241
  -0.01073826 -0.03663501 -0.01126761 -0.07692308 0.03703704
   0.09985735 0.0998703 0.00943396 -0.06308411 0.04738155;
ENDDATA
CALC:
T=@sum(capital(i):q(i)*x0(i));
ENDCALC
MIN=@sum(station(j):z(j))/((1-n)*@size(station))+m;
@for(linkII(k,i)|k#eq#3:r(k,i)=0);
@for(linkII(k,i)|k#ne#3:@bin(r(k,i)));
@for(capital(i):
    s(1,i)<=r(1,i);
    s(2,i)<=1;
    s(3,i)<=r(2,i);
    @sum(points(k):s(k,i)=1);
    @sum(points(k):r(k,i)=1);
    x(i)-x0(i)=u(i)-v(i);
    u(i)+v(i)=2500*s(2,i)/q(i)+T*s(3,i)/q(i);
    c(i)=5*s(1,i)+15*s(2,i)+6*T*s(3,i)/1000;
    q(i)*x(i)<=e(i)*T;
);
T=@sum(capital:c)+@sum(capital:q*x);
@sum(capital(i):@sum(station(j):y(i,j))/@size(station)*q(i)*x(i))-@sum(capital(i):c(i))>=w*T;
@for(station(j):
    z(j)+m>=-@sum(capital(i):x(i)*y(i,j)));
END

8
zwjcandy 发表于 2008-5-4 09:07:00

程序错误已经解决,ststion取5能运行。但y(i,j),8行250列的数据应该怎么导入到Lingo程序中呢?

1.用Edit|Insert New Objects...,由文件创建:指定那个excel的位置,确定。Lingo里就出现了个excel格式,8行250列的表。Solve,还是出现:Error code:1017,只是Variables增加到306个。

2.把excel中的8行250列数据复制,用“Edit|Paste Special...”,“未格式化文本”。这样能运行.结果:Model:ILP, State:Global Opt. Variables:total:323,Intergers:16..., 怎样判断结果正不正确呢? 并且用这个y(i,j)有很大一坨数据在程序中,怪吓人的,有没有别的方法咧?

现在主要是y(i,j)输入问题,请高手指点! SQ!

9
chunfeng23 发表于 2009-3-25 22:17:00
你好,我现在也在写关于CVAR优化的问题,但是后面模型实现方面还没有搞懂,希望能和你交流下,我发现你是用lingo写的程序,我本想用matlab的,但是还是希望你能联系下我,我的QQ:529671612,手机:15928590382,谢谢

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-27 06:35