模拟退火算法Python实现

系统 3024 0

模拟退火算法Python实现

  • 瞎BB
  • 代码
    • 导入库以及参数设置
    • 目标函数
    • 主函数

瞎BB

代码

导入库以及参数设置

            
              
                import
              
               matplotlib
              
                .
              
              pyplot 
              
                as
              
               plt

              
                import
              
               math

              
                import
              
               random
T_init 
              
                =
              
              
                100
              
              
                # 初始最大温度
              
              
alpha 
              
                =
              
              
                0.95
              
              
                # 降温系数
              
              
T_min 
              
                =
              
              
                1e
              
              
                -
              
              
                3
              
              
                # 最小温度,即退出循环条件
              
            
          

目标函数

            
              
                def
              
              
                obj
              
              
                (
              
              x
              
                )
              
              
                :
              
              
    y 
              
                =
              
              
                10
              
              
                *
              
               math
              
                .
              
              sin
              
                (
              
              
                5
              
              
                *
              
               x
              
                )
              
              
                +
              
              
                7
              
              
                *
              
               math
              
                .
              
              cos
              
                (
              
              
                4
              
              
                *
              
               x
              
                )
              
              
                return
              
              
                -
              
              y

            
          

主函数

            
              
                def
              
              
                SA
              
              
                (
              
              T_init
              
                ,
              
              alpha
              
                ,
              
              T_min
              
                )
              
              
                :
              
              
    T 
              
                =
              
               T_init
    x_new 
              
                =
              
               random
              
                .
              
              random
              
                (
              
              
                )
              
              
                *
              
              
                10
              
              
                #初解
              
              
    x_current 
              
                =
              
               x_new
    y_current 
              
                =
              
              
                float
              
              
                (
              
              
                'inf'
              
              
                )
              
              
    x_best 
              
                =
              
               x_new
    y_best 
              
                =
              
              
                float
              
              
                (
              
              
                'inf'
              
              
                )
              
              
                while
              
               T 
              
                >
              
               T_min
              
                :
              
              
                for
              
               i 
              
                in
              
              
                range
              
              
                (
              
              
                100
              
              
                )
              
              
                :
              
              
            delta_x 
              
                =
              
               random
              
                .
              
              random
              
                (
              
              
                )
              
              
                -
              
              
                0.5
              
              
                # 自变量变化后仍要求在[0,10]之间
              
              
                if
              
              
                0
              
              
                <
              
              
                (
              
              x_new 
              
                +
              
               delta_x
              
                )
              
              
                <
              
              
                10
              
              
                :
              
              
                x_new 
              
                =
              
               x_new 
              
                +
              
               delta_x
            
              
                else
              
              
                :
              
              
                x_new 
              
                =
              
               x_new 
              
                -
              
               delta_x
            y_new 
              
                =
              
               obj
              
                (
              
              x_new
              
                )
              
              
                if
              
              
                (
              
              y_new
              
                <
              
              y_current
              
                )
              
              
                :
              
              
                y_current
              
                =
              
              y_new
                x_current
              
                =
              
              x_new
                
              
                if
              
              
                (
              
              y_new
              
                <
              
              y_best
              
                )
              
              
                :
              
              
                    y_best
              
                =
              
              y_new
                    x_best
              
                =
              
              x_new
            
              
                else
              
              
                :
              
              
                if
              
               random
              
                .
              
              random
              
                (
              
              
                )
              
              
                <
              
               math
              
                .
              
              exp
              
                (
              
              
                -
              
              
                (
              
              y_new 
              
                -
              
               y_current
              
                )
              
              
                /
              
               T
              
                )
              
              
                :
              
              
                    y_current
              
                =
              
              y_new
                    x_current
              
                =
              
              x_new
                
              
                else
              
              
                :
              
              
                    x_new
              
                =
              
              x_current
        T 
              
                *=
              
               alpha
    
              
                print
              
              
                (
              
              
                '最优解'
              
              
                ,
              
              x_best
              
                ,
              
              obj
              
                (
              
              x_best
              
                )
              
              
                )
              
              
SA
              
                (
              
              T_init
              
                ,
              
              alpha
              
                ,
              
              T_min
              
                )
              
            
          

更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论