数模论坛

 找回密码
 注-册-帐-号
搜索
热搜: 活动 交友 discuz
查看: 4818|回复: 8

各位高手,我刚学lingo,不知道怎么解整数规划,请高手不吝赐教奥,最好给个解整数

[复制链接]
发表于 2005-6-12 19:01:15 | 显示全部楼层 |阅读模式
[em06][em06][em06][em06][em06]
发表于 2005-6-15 21:35:11 | 显示全部楼层
<>在变量定义时加个gin(),括号里是要求为整数的量,例如gin(x1)表示x1为整数变量.</P>
<>bin(x1)表示x1为0,1变量,就是x1=1或0.</P>
 楼主| 发表于 2005-6-16 02:01:33 | 显示全部楼层
终于有人站出来了,谢谢嗬.我感觉了lingo还是有一定难度的,那个变量与变量之间的关系搞得我头都晕了.看来还需要下功夫阿.[em03][em03][em03][em03][em03][em03]
发表于 2005-6-16 02:39:52 | 显示全部楼层
<DIV class=quote><B>以下是引用<I>tcr_2001</I>在2005-6-15 18:01:33的发言:</B><BR>终于有人站出来了,谢谢嗬.我感觉了lingo还是有一定难度的,那个变量与变量之间的关系搞得我头都晕了.看来还需要下功夫阿.[em03][em03][em03][em03][em03][em03]</DIV>
<>呵呵,不过个人觉得刚开始的时候觉得LINGO挺好的,但是比赛时大家要比的是最优解,LING与模拟退火和遗传算出的解还是多少有差距,,除非你理论部分写的特别好,才能与别人比,一般现在都是把LINGO解作为一个检验解,就是检查一下用MATLAB算出的解是不是合理的!</P>
 楼主| 发表于 2005-6-16 17:12:17 | 显示全部楼层
<>楼上的对于lingo的见解很深刻,我非常佩服。</P>
<>我也学了一点matlab,也想学模拟退火与遗传算法编程,可是matlab的英文help实在看不懂。</P>
<>高人能否给出介绍一下如何用这些算法编程,或者介绍一下这方面的参考书,多谢了。</P>
发表于 2005-6-16 22:42:31 | 显示全部楼层
<DIV class=quote><B>以下是引用<I>tcr_2001</I>在2005-6-16 9:12:17的发言:</B><BR>
<>楼上的对于lingo的见解很深刻,我非常佩服。</P>
<>我也学了一点matlab,也想学模拟退火与遗传算法编程,可是matlab的英文help实在看不懂。</P>
<>高人能否给出介绍一下如何用这些算法编程,或者介绍一下这方面的参考书,多谢了。</P></DIV>
<P>
<P>其实编程的话是要先看懂原理和步骤,比如模拟退火算法<BR>  模拟退火算法可以分解为解空间、目标函数和初始解三部分。<BR> 模拟退火的基本思想:<BR>  (1) 初始化:初始温度T(充分大),初始解状态S(是算法迭代的起点),每个T值的迭代次数L<BR>  (2) 对k=1,……,L做第(3)至第6步:<BR>  (3) 产生新解S′<BR>  (4) 计算增量Δt′=C(S′)-C(S),其中C(S)为评价函数<BR>  (5) 若Δt′&lt;0则接受S′作为新的当前解,否则以概率exp(-Δt′/T)接受S′作为新的当前解.<BR>  (6) 如果满足终止条件则输出当前解作为最优解,结束程序。<BR>终止条件通常取为连续若干个新解都没有被接受时终止算法。<BR>  (7) T逐渐减少,且T-&gt;0,然后转第2步。<BR>算法对应动态演示图:<BR>模拟退火算法新解的产生和接受可分为如下四个步骤:<BR>  第一步是由一个产生函数从当前解产生一个位于解空间的新解;为便于后续的计算和接受,减少算法耗时,通常选择由当前新解经过简单地变换即可产生新解的方法,如对构成新解的全部或部分元素进行置换、互换等,注意到产生新解的变换方法决定了当前新解的邻域结构,因而对冷却进度表的选取有一定的影响。<BR>  第二步是计算与新解所对应的目标函数差。因为目标函数差仅由变换部分产生,所以目标函数差的计算最好按增量计算。事实表明,对大多数应用而言,这是计算目标函数差的最快方法。<BR>  第三步是判断新解是否被接受,判断的依据是一个接受准则,最常用的接受准则是Metropo1is准则: 若Δt′&lt;0则接受S′作为新的当前解S,否则以概率exp(-Δt′/T)接受S′作为新的当前解S。<BR>  第四步是当新解被确定接受时,用新解代替当前解,这只需将当前解中对应于产生新解时的变换部分予以实现,同时修正目标函数值即可。此时,当前解实现了一次迭代。可在此基础上开始下一轮试验。而当新解被判定为舍弃时,则在原当前解的基础上继续下一轮试验。<BR>  模拟退火算法与初始值无关,算法求得的解与初始解状态S(是算法迭代的起点)无关;模拟退火算法具有渐近收敛性,已在理论上被证明是一种以概率l 收敛于全局最优解的全局优化算法;模拟退火算法具有并行性。</P>
<P><FONT color=#f73809>知道算法思想和步骤实现不是很难的;多看些算法书,最好带程序的!</FONT></P>
 楼主| 发表于 2005-6-18 02:58:17 | 显示全部楼层
哦。现在终于知道模拟退火只是一种思想,具体编程还要自己编。我现在在学matlab编程,看到三行以上的程序就头晕。我要努力学编程了[em01][em01][em01][em01][em01],希望自己早日能写出10行以上的程序。
发表于 2005-6-20 04:28:08 | 显示全部楼层
<>现在的matlab7.0里面就有官方的遗传算法的命令 点击help ga </P>
<>就可以查阅相关的用法。不过值得注意的是:在matlab7.0中有</P>
<>许多语法都与以前的版本不相同,所以在编写程序的时候一定</P>
<P>要学会使用在线帮助才是。</P>
<P>&gt;&gt; help ga<BR> GA    Genetic algorithm solver.<BR>    X = GA(FITNESSFCN,NVARS) finds the minimum of FITNESSFCN using<BR>    GA. NVARS is the dimension (number of design variables) of the<BR>    FITNESSFCN. FITNESSFCN accepts a vector X of size 1-by-NAVRS,<BR>    and returns a scalar evaluated at X. <BR>    <BR>    X = GA(FITNESSFCN,NAVRS,OPTIONS) finds the minimum for<BR>    FITNESSFCN with the default optimization parameters replaced by values<BR>    in the structure OPTIONS. OPTIONS can be created with the GAOPTIMSET<BR>    function.<BR>    <BR>    X = GA(PROBLEM) finds the minimum for PROBLEM. PROBLEM is a structure<BR>    that has the following fields:<BR>        fitnessfcn: &lt;Fitness Function&gt;<BR>             nvars: &lt;Number of design variables&gt;<BR>           options: &lt;Options structure created with GAOPTIMSET&gt;<BR>         randstate: &lt;Optional field to reset rand state&gt;<BR>        randnstate: &lt;Optional field to reset randn state&gt;<BR>    <BR>    [X, FVAL] = GA(FITNESSFCN, ...) returns FVAL, the value of the fitness<BR>    function FITNESSFCN at the solution X.<BR>    <BR>    [X,FVAL,REASON] = GA(FITNESSFCN, ...) returns the REASON for stopping.<BR> <BR>    [X,FVAL,REASON,OUTPUT] = GA(FITNESSFCN, ...) returns a<BR>    structure OUTPUT with the following information: <BR>             randstate: &lt;State of the function RAND used before GA started&gt;<BR>            randnstate: &lt;State of the function RANDN used before GA started&gt;<BR>           generations: &lt;Total generations, excluding HybridFcn iterations&gt;<BR>             funccount: &lt;Total function evaluations&gt;<BR>               message: &lt;GA termination message&gt;<BR> <BR>    [X,FVAL,REASON,OUTPUT,POPULATION] = GA(FITNESSFCN, ...) returns the final<BR>    POPULATION at termination.<BR>    <BR>    [X,FVAL,REASON,OUTPUT,POPULATION,SCORES] = GA(FITNESSFCN, ...) returns the<BR>    SCORES of the final POPULATION.<BR>    <BR>    There are several steps to the GA:<BR>          population generation<BR>          scoring<BR>          loop<BR>            fitness <BR>            scaling <BR>            selection <BR>            crossover <BR>            mutation <BR>            scoring <BR>            migration<BR>            output <BR>            termination testing<BR>          end loop<BR>    Each of these steps can be controlled by the options structure created <BR>    by GAOPTIMSET.<BR> <BR>    Example:<BR>      Minimize 'rastriginsfcn' fitness function of numberOfVariables = 2<BR>         x = ga(@rastriginsfcn,2)<BR>      Display plotting functions while GA minimizes<BR>         options = gaoptimset('PlotFcns',...<BR>         <a href="mailt{@gaplotbestf,@gaplotbestindiv,@gaplotexpectation,@gaplotstopping" target="_blank" >{@gaplotbestf,@gaplotbestindiv,@gaplotexpectation,@gaplotstopping</A>});<BR>         [x,fval,reason,output] = ga(@rastriginsfcn,2,options)<BR> <BR>    See also gaoptimset, fitnessfunction, patternsearch, @.</P>
<P><BR>    Reference page in Help browser<BR>       doc ga</P>

 楼主| 发表于 2005-6-20 18:49:45 | 显示全部楼层
看了matlab7.0的ga函数的用法,里面的fitness函数还是蛮复杂的。而且使用工具箱大概只能解决一点简单的问题。我现在用的是matlab6.5的版本,里面的ga函数的变量更多,你能不能举一点用ga算法的例子,贴出来给我学习学习。[em09][em09]期待ing
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

小黑屋|手机版|Archiver|数学建模网 ( 湘ICP备11011602号 )

GMT+8, 2024-11-27 15:28 , Processed in 0.051312 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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