ABAP算法 模拟退火

模拟退火算法

        算法原理及概念本文仅结合实现过程做简述

        模拟退火算法是一种解决优化问题的算法。通过模拟固体退火过程中的原子热运动来寻找全局最优解。在求解复杂问题时,模拟退火算法可以跳出局部最优解获取全局最优解。

        模拟退火算法包含退火过程和Metropolis算法两个部分,体现在外循环和内循环中,外循环就是退火过程,将固体从较高的温度按照降温系数k使温度按照一定的比例下降,当达到终止温度tn时,退火过程结束。内循环为在固定温度下,不断迭代寻求当前温度下能量的最低值,Metropolis 算法可以使得结果跳出局部最优值。

模拟退火基本参数:

        T:初始温度,较大值

        K:降温系数

        TN:终止温度

        L:内循环迭代次数

概述图

        算法求解过程中主要的两个重要数据,扰动量的多少以及新解接受概率,由于这两个参数依托于实际计算场景,因此使用两个参数控制

        FLOAT:用来控制扰动量的范围,最大为1

        R:新解保留概率,R值越大,新解保留概率越大,主要目的是平衡能量差过大或过小导致的概率失衡

处理方法及属性

代码地址:https://download.csdn.net/download/xiefireworks/88576481

示例

Demo代码 
CLASS lcl_obj DEFINITION FINAL  .PUBLIC SECTION.INTERFACES zif_annealing_c .PROTECTED SECTION.PRIVATE SECTION.
ENDCLASS.CLASS lcl_obj IMPLEMENTATION.METHOD zif_annealing_c~check_valid.DATA: lv_sum TYPE i.ENDMETHOD.METHOD zif_annealing_c~calcu_target_value.DATA: lv_sum TYPE i.DATA: lv_x1 TYPE ftvv_part_default_probability.DATA: lv_x2 TYPE ftvv_part_default_probability.LOOP AT units INTO DATA(ls_unit).CASE ls_unit-name.WHEN 'X1'.lv_x1 = ls_unit-value / 10000 - 5.lv_sum = lv_sum + 20 * ls_unit-value.WHEN 'X2'.lv_x2 = ls_unit-value / 10000 - 5.lv_sum = lv_sum + 30 * ls_unit-value.WHEN 'X3'.lv_sum = lv_sum + 50 * ls_unit-value.WHEN OTHERS.ENDCASE.ENDLOOP.*    target_value = 4000 - lv_sum.target_value = 4 * lv_x1 * lv_x1 - 21 / 10 * ipow( base = lv_x1 exp = 4 ) + ipow( base = lv_x1 exp = 6 ) / 3+ lv_x1 * lv_x2 - 4 * ipow( base = lv_x2 exp = 2 ) + 4 * ipow( base = lv_x2 exp = 4 ).ENDMETHOD.ENDCLASS.DATA: lo_g    TYPE REF TO zcl_annealing,lo_gc   TYPE REF TO lcl_obj,lt_recs TYPE zcl_annealing=>tt_allgroups.START-OF-SELECTION.CREATE OBJECT lo_g TYPE zcl_annealing.CREATE OBJECT lo_gc.lo_g->init( EXPORTING iv_k          = '0.998'iv_l          = '1000'iv_t          = '1000'iv_tn         = '10'iv_random_up  = '100'iv_r          = '0.00005'iv_float      = '0.2'io_annealing  = lo_gc).lo_g->add_var( name = 'X1' low = 0 high = 100000 ).lo_g->add_var( name = 'X2' low = 0 high = 100000 ).DATA(lt_unit) = lo_g->get_result( ).lo_g->get_record( IMPORTING et_rec = lt_recs ).WRITE:/ '最优解'.LOOP AT lt_unit INTO DATA(ls_unit).DATA value TYPE ftvv_part_default_probability.value = ls_unit-value / 10000 - '5.0000'.WRITE:/ ls_unit-name, ':' ,value.ENDLOOP.WRITE:/ '迭代过程'.SORT lt_recs BY target DESCENDING t.LOOP AT lt_recs INTO DATA(ls_rec).WRITE:/ '温度:',ls_rec-t,'  目标值:' ,ls_rec-target, '  值:'.LOOP AT ls_rec-units INTO ls_unit.WRITE:ls_unit-name, '-' ,ls_unit-value , ';'.ENDLOOP.ENDLOOP.
运行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/204679.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI模型训练——入门篇(二)

导语:本文主要介绍了基于BERT的文本分类方法,通过使用huggingface的transformers库实现自定义模型和任务。具体步骤包括:使用load_dataset函数加载数据集,并应用自定义的分词器;使用map函数将自定义分词器应用于数据集…

数组中的第 K 个最大元素(C++实现)

数组中的第 K 个最大元素 题目思路代码 题目 数组中的第 K 个最大元素 思路 通过使用优先队列(最大堆)来找到数组中第k大的元素。通过弹出最大堆中的前k-1个元素,留下堆中的顶部元素作为结果返回。 代码 class Solution { public:int find…

Day41 使用listwidget制作简易图片播放器

1.简介 使用QlistWidget实现简易图片播放器,可以打开一个图片序列,通过item的单击事件实现图片的切换,通过设置list的各种属性实现图片预览的显示,美化滚动条即可实现一个简易图片播放器。 2.效果 3.实现步骤: 1.初始…

QT linux下应用程序打包

一、应用程序app 1、应用程序的pro文件 2、 程序工作函数 3、app的UI界面 二、动态库lib 1、Lib类头文件 2、.cpp文件 三、对应用程序和动态库进行构建 1、对动态库进行qmake,然后进行构建 2、对应用程序进行qmake,然后进行构建 3、查看构建目录 四、编写脚本 …

postgreSQL如何快速查询大表数据量

文章目录 场景方案结果 场景 我有一个非常大的表,估计几百万或者几千万。 我开始使用了 select count(*) from my_table_javapub 方式,查询非常慢。 如何解决??? 方案 如果你需要更快地获取表中的行数&#xff0c…

【PHP】MySQL简介与MySQLi函数(含PHP与MySQL交互)

文章目录 一、MySQL简介二、MySQLi函数1. 开启mysqli扩展:2. PHP MySQLi扩展的常用函数 三、PHP与MySQL交互0. 准备1. 创建连接(mysqli_connect() )连接mysql语法 2. 选择数据库(mysqli_select_db())3. 在php中操作数据…

如果每天工资按代码行数来算,来看看你每天工资是多少

说在前面 😼😼如果每天的工资取决于我们所编写的代码行数,那么我们的生活会发生怎样的改变?来看看你的同事们今天都提交了多少代码吧,看看谁是卷王,谁在摸鱼(🐶🐶狗头保命…

HTML新手入门笔记整理:HTML基本介绍

网页 静态页面 仅可供用户浏览,不具备与服务器交互的功能。 动态页面 可供用户浏览,具备与服务器交互的功能。 HTML HTML,全称HyperText Markup Language(超文本标记语言),是一种用于创建网页的标准标记语言。用于…

如何应对雨天飞行的挑战?无人机机库防护能力解析

一、 背景介绍 无人机机库是无人机停放和起降场所,类似传统飞机的 hangar(飞机库)。它是一个专门用于存储、维护和保护无人机的设施。无人机机库的存在有助于提高无人机的安全性,同时也为无人机提供了一个有序的管理场所。 雨天…

c语言-希尔排序

目录 一、插入排序 1、插入排序的概念 2、插入排序的逻辑实现 3、插入排序的实现 二、希尔排序 1、希尔排序概念 2、希尔排序逻辑实现 3、间隔值(gap)对排序的影响 4、希尔排序的实现 三、插入排序与希尔排序性能对比测试 结语: 前言…

2021年12月 Scratch图形化(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共15题,每题2分,共30分) 第1题 下图两个积木的值分别是? A:false true B:false false C:true true D:true false 答案:A 第2题 小猫和小狗是非常好的朋友,他们发明了一种加密方法:用两位数字代表字母。…

进程和线程的关系

⭐ 作者:小胡_不糊涂 🌱 作者主页:小胡_不糊涂的个人主页 📀 收录专栏:JavaEE 💖 持续更文,关注博主少走弯路,谢谢大家支持 💖 进程&线程 1. 什么是进程PCB 2. 什么是…

【设计模式-2.2】创建型——简单工厂和工厂模式

说明:本文介绍设计模式中,创建型设计模式中的工厂模式; 飞机大战 创建型设计模式,关注于对象的创建,本文介绍的简单工厂和工厂模式同样也是。举一个游戏例子,如飞机大战游戏中,屏幕中敌人类型…

优维低代码实践:搜索功能

优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。 优维…

每日一练:约瑟夫生者死者小游戏

1. 问题描述 约瑟夫问题(Josephus problem)是一个经典的数学和计算机科学问题,源于犹太历史学家弗拉维奥约瑟夫斯(Flavius Josephus)的著作《犹太战记》。问题的描述如下:   在这个问题中,有n…

uniapp微信小程序中阻止事件冒泡

开发场景:列表中展示地块的数据信息,用户可以点击列表进入地块的详情界面,也可以点击列表中的星星按钮进行收藏 遇到的问题:每次点击星星的时候,都会触发父级的点击事件,从而进入到详情界面 原本的代码&am…

android开发:安卓13Wifi和热点查看与设置功能

近日对安卓热点功能做了一些技术验证,目的是想利用手机开热点给设备做初始化,用的是安卓13,简言之: 热点设置功能不可用,不可设置SSID和密码,不可程序控制开启关闭,网上的代码统统都过时了Loca…

【数据结构】树与二叉树(廿五):树搜索给定结点的父亲(算法FindFather)

文章目录 5.3.1 树的存储结构5. 左儿子右兄弟链接结构 5.3.2 获取结点的算法1. 获取大儿子、大兄弟结点2. 搜索给定结点的父亲a. 算法FindFatherb. 算法解析c. 代码实现 3. 代码整合 5.3.1 树的存储结构 5. 左儿子右兄弟链接结构 【数据结构】树与二叉树(十九&…

ESP32-Web-Server 实战编程-通过网页控制设备多个 GPIO

ESP32-Web-Server 实战编程-通过网页控制设备多个 GPIO 概述 上节 ESP32-Web-Server 实战编程-通过网页控制设备的 GPIO 讲述了如何通过网页控制一个 GPIO。本节实现在网页上控制多个 GPIO。 示例解析 前端设计 前端代码建立了四个 GPIO,如下死 GPIO 2 在前端的…

wmvcore.dll丢失怎么办?解决电脑出现wmvcore.dll丢失问题5个方法

wmvcore.dll缺失5个解决方法与wmvcore.dll丢失原因及文件介绍 引言: 在日常使用电脑的过程中,我们可能会遇到一些错误提示,其中之一就是wmvcore.dll缺失。wmvcore.dll是Windows Media Video编码解码相关动态链接库文件之一,它对…