`
wsmajunfeng
  • 浏览: 498985 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java Atomic

 
阅读更多

我们知道volatile修饰的变量可以实现基本的加载和赋值的原子性,但是对于像i++等操作就不能保证原子性了,在JDK1.5之前我们只能通过 synchronized(阻塞的方式)实现这些复合操作的原子性,在JDK1.5中java.util.concurrent.atomic 包提供了若干个类能实现对int,long,boolean,reference的几个特殊方法非阻塞原子性,这一系列类的主要基于以下两点

1.volatile修饰变量,保证get()/set()的原子性
2.利用系统底层的CAS原语来实现非阻塞的其它方法原子操作
  compareAndSwap(memorylocation,expectedValue,newValue);该操作接受一个预计值和新的赋值,当预计值与实际值相符合时,就表明该变量在此期间没有被别的线程改变(可能有ABA问题),就把新值赋给该引用.
  通常将 CAS 用于同步的方式是从地址 V 读取值 A,执行多步计算来获得新值 B,然后使用 CAS 将 V 的值从 A 改为 B。如果 V 处的值尚未同时更改,则 CAS 操作成功


各个类的介绍

1.AtomicInteger
  实现了对Int的各种操作的原子化,我们看看其中的方法
   
   //实现atomic类的最大诀窍#####
    public final boolean compareAndSet(int expect, int update) {
        //如果内存位置的值与期望值相同则,赋予新值,并返回true
return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
    }

   //该方法实现了i++的非阻塞的原子操作
   public final int getAndIncrement() {
        for (;;) { //循环,使用CAS的经典方式,这是实现non-blocking方式的代价
            int current = get();//得到现在的值
            int next = current + 1;//通过计算得到要赋予的新值
            if (compareAndSet(current, next)) //关键点,调用CAS原子更新,
                return current;
        }
    }

  

2.AtmoicLong
  与AtomicInteger相似,只是是基于Long

3.AtmoicBoolean
  与AtomimcInteger相似,基于boolean
4.AtomicReference
  与上述三个类不同,该类是用于原子地更新某个引用,只提供操作保证某个引用的更新会被原子化,常用封装某个引用会被多个线程频繁更新的场景,保证线程安全性

public final V getAndSet(V newValue) {
        while (true) {
            V x = get();
            if (compareAndSet(x, newValue))
                return x;
        }
    }


======================================================================

5.AtomicIntegerArray
  对数组中的制定int提供几种特定的原子操作,注意不是对这个数组对象进行原子操作
    //对数组的第i个元素进行原子的i--操作
    //注意该类的原子操作都是针对数组中的某个指定元素的
     public final int getAndDecrement(int i) {
        while (true) {
            int current = get(i);
            int next = current - 1;
            if (compareAndSet(i, current, next))
                return current;
        }
    }

6.AtomicLongArray
  与AtomicIntegerArray相似,基于long的
7.AtomicReferenceArray
  与AtomicIntegerArray相似,基于reference的
======================================================================
8.AtomicLongFieldUpdater
  上述的7个类都是基于对类自身的volatile数据提供原子操作,但是如何对已经存在的类中的volatile数据提供原子支持呢,这个需求是很常见 的,因为我们在日常开发中经常要使用第三方的class.8#9#10这三个类就是利用反射机制对指定类的指定的volatile field提供原子操作的工具类.这三个类在原子数据结构中被用到,可以参考源码.注意只对public volatile的非static 成员起作用
//工厂方法,给指定类的指定fild(必须是long)建立一个update,field必须是volatile的
public static <U> AtomicLongFieldUpdater<U> newUpdater(Class<U> tclass, String fieldName)

9.AtomicIntegerFieldUpdater
与上述类相似,只是基于int
10.AtomicReferenceFieldUpdater
  基于Reference
======================================================================
11.AtomicMarkableReference
12.AtomicStampedReference

 

 

 

 

 

 

 

 

 

J2SE 5.0提供了一组atomic class来帮助我们简化同步处理。基本工作原理是使用了同步synchronized的方法实现了对一个long, integer, 对象的增、减、赋值(更新)操作. 比如对于++运算符AtomicInteger可以将它持有的integer 能够atomic 地递增。在需要访问两个或两个以上 atomic变量的程序代码(或者是对单一的atomic变量执行两个或两个以上的操作)通常都需要被synchronize以便两者的操作能够被当作是 一个atomic的单元。

对array atomic变量来说,一次只有一个索引变量可以变动,并没有功能可以对整个array做atomic化的变动。

关于Atomic的几个方法
getAndSet() : 设置新值,返回旧值.
compareAndSet(expectedValue, newValue) : 如果当前值(current value)等于期待的值(expectedValue), 则原子地更新指定值为新值(newValue), 如果更新成功,返回true, 否则返回false, 换句话可以这样说: 将原子变量设置为新的值, 但是如果从我上次看到的这个变量之后到现在被其他线程修改了(和我期望看到的值不符), 那么更新失败

从effective java (2)中拿来的一个关于AtomicReference的一个例子:
Java代码

Java代码 复制代码  收藏代码
  1. public   class  AtomicTest {      
  2.      private   int  x, y;      
  3.      
  4.      private   enum  State {      
  5.         NEW, INITIALIZING, INITIALIZED      
  6.     };      
  7.      
  8.      private   final  AtomicReference<State> init =  new  AtomicReference<State>(State.NEW);      
  9.           
  10.      public  AtomicTest() {      
  11.     }      
  12.           
  13.      public  AtomicTest( int  x,  int  y) {      
  14.         initialize(x, y);      
  15.     }      
  16.      
  17.      private   void  initialize( int  x,  int  y) {      
  18.          if  (!init.compareAndSet(State.NEW, State.INITIALIZING)) {      
  19.              throw   new  IllegalStateException( "initialize is error" );      
  20.         }      
  21.          this .x = x;      
  22.          this .y = y;      
  23.         init.set(State.INITIALIZED);      
  24.     }      
  25.      
  26.      public   int  getX() {      
  27.         checkInit();      
  28.          return  x;      
  29.     }      
  30.      
  31.      public   int  getY() {      
  32.         checkInit();      
  33.          return  y;      
  34.     }      
  35.           
  36.      private   void  checkInit() {      
  37.          if  (init.get() == State.INITIALIZED) {      
  38.              throw   new  IllegalStateException( "uninitialized" );      
  39.         }      
  40.     }      
  41.           
  42. }   

上面的例子比较容易懂, 不过貌似没什么价值, 而在实际的应用中, 我们一般采用下面的方式来使用atomic class:
Java代码

Java代码 复制代码  收藏代码
  1. public   class  CounterTest {      
  2.     AtomicInteger counter =  new  AtomicInteger( 0 );      
  3.      
  4.      public   int  count() {      
  5.          int  result;      
  6.          boolean  flag;      
  7.          do  {      
  8.             result = counter.get();      
  9.              // 断点      
  10.              // 单线程下, compareAndSet返回永远为true,      
  11.              // 多线程下, 在与result进行compare时, counter可能被其他线程set了新值, 这时需要重新再取一遍再比较,      
  12.              // 如果还是没有拿到最新的值, 则一直循环下去, 直到拿到最新的那个值      
  13.             flag = counter.compareAndSet(result, result +  1 );      
  14.         }  while  (!flag);      
  15.      
  16.          return  result;      
  17.     }      
  18.      
  19.      public   static   void  main(String[] args) {      
  20.          final  CounterTest c =  new  CounterTest();      
  21.          new  Thread() {      
  22.              @Override      
  23.              public   void  run() {      
  24.                 c.count();      
  25.             }      
  26.         }.start();      
  27.      
  28.          new  Thread() {      
  29.              @Override      
  30.              public   void  run() {      
  31.                 c.count();      
  32.             }      
  33.         }.start();      
  34.      
  35.          new  Thread() {      
  36.              @Override      
  37.              public   void  run() {      
  38.                 c.count();      
  39.             }      
  40.         }.start();      
  41.     }      

类似i++这样的"读-改-写"复合操作(在一个操作序列中, 后一个操作依赖前一次操作的结果), 在多线程并发处理的时候会出现问题, 因为可能一个线程修改了变量, 而另一个线程没有察觉到这样变化, 当使用原子变量之后, 则将一系列的复合操作合并为一个原子操作,从而避免这种问题, i++=>i.incrementAndGet()
原子变量只能保证对一个变量的操作是原子的, 如果有多个原子变量之间存在依赖的复合操作, 也不可能是安全的, 另外一种情况是要将更多的复合操作作为一个原子操作, 则需要使用synchronized将要作为原子操作的语句包围起来. 因为涉及到可变的共享变量(类实例成员变量)才会涉及到同步, 否则不必使用synchronized

 

 

 

 

分享到:
评论
1 楼 lyp2002924 2015-08-19  
讲的,看到的最清晰明白的。

相关推荐

    基于.net+SQLserver旅游网站平台源码-说明文档资料.zip

    旅游网站首页主要功能有:首页、景点信息、客房信息、美食信息、用户分享、公告信息、个人中心、后台管理、帮助中心等。

    基于MATLAB的储能电站建模与评价:平抑可再生能源功率波动,优化风光曲线与负荷匹配度,储能电站平抑可再生能源功率波动的建模与评价:策略设计与并网优化分析,用于平抑可再生能源功率波动的储能电站建模及评

    基于MATLAB的储能电站建模与评价:平抑可再生能源功率波动,优化风光曲线与负荷匹配度,储能电站平抑可再生能源功率波动的建模与评价:策略设计与并网优化分析,用于平抑可再生能源功率波动的储能电站建模及评价 关键词:储能电站 功率波动 并网 平抑可再生能源 参考文档:《用于平抑可再生能源功率波动的储能电站建模及评价》仅参考 《光伏发电容量可信度评估》参考风电与负荷一致性问题思路 仿真平台:MATLAB yalmip 主要内容:代码主要做的是一个通过储能电站平抑可再生能源波动的问题,通过储能电站平抑可再生能源的波动,建立了两种不同的储能平抑策略,使得风电功率曲线以及光伏曲线变得光滑,从而可以减少并网功率波动;此外,还研究了如何通过储能电站使得风光曲线与负荷曲线趋于一致,从而更好的将分布式能源用于供负荷。 实现效果良好,具体看图。 ,关键词:储能电站; 功率波动; 并网; 平抑可再生能源; 建模; 评价; 风光曲线; 负荷曲线。,基于MATLAB yalmip的储能电站建模与评价:平抑可再生能源功率波动的优化策略

    基于matlab实现的水下图像增强融合算法+源码(毕业设计&课程设计&项目开发)

    基于matlab实现的水下图像增强融合算法+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于matlab实现的水下图像增强融合算法+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用 基于matlab实现的水下图像增强融合算法+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用 基于matlab实现的水下图像增强融合算法+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于matlab实现的水下图像增强融合算法+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于matlab实现的水下图像增强融合算法+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~

    基于java开发的安卓多窗口管理界面,仿UC浏览器多窗口管理界面+源码+文档(毕业设计&课程设计&项目开发)

    基于java开发的安卓多窗口管理界面,仿UC浏览器多窗口管理界面+源码+文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档~ 基于java开发的安卓多窗口管理界面,仿UC浏览器多窗口管理界面+源码+文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 基于java开发的安卓多窗口管理界面,仿UC浏览器多窗口管理界面+源码+文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 基于java开发的安卓多窗口管理界面,仿UC浏览器多窗口管理界面+源码+文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档~ 基于java开发的安卓多窗口管理界面,仿UC浏览器多窗口管理界面+源码+文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档~

    exceptionLogs.zip

    exceptionLogs.zip

    34页-智慧方案之海尔智慧社区解决方案.pdf

    在当今科技日新月异的时代,智慧社区的概念正悄然改变着我们的生活方式。它不仅仅是一个居住的空间,更是一个集成了先进科技、便捷服务与人文关怀的综合性生态系统。以下是对智慧社区整体解决方案的精炼融合,旨在展现其知识性、趣味性与吸引力。 一、智慧社区的科技魅力 智慧社区以智能化设备为核心,通过综合运用物联网、大数据、云计算等技术,实现了社区管理的智能化与高效化。门禁系统采用面部识别技术,让居民无需手动操作即可轻松进出;停车管理智能化,不仅提高了停车效率,还大大减少了找车位的烦恼。同时,安防报警系统能够实时监测家中安全状况,一旦有异常情况,立即联动物业进行处理。此外,智能家居系统更是将便捷性发挥到了极致,通过手机APP即可远程控制家中的灯光、窗帘、空调等设备,让居民随时随地享受舒适生活。 视频监控与可视对讲系统的结合,不仅提升了社区的安全系数,还让居民能够实时查看家中情况,与访客进行视频通话,大大增强了居住的安心感。而电子巡更、公共广播等系统的运用,则进一步保障了社区的治安稳定与信息传递的及时性。这些智能化设备的集成运用,不仅提高了社区的管理效率,更让居民感受到了科技带来的便捷与舒适。 二、智慧社区的增值服务与人文关怀 智慧社区不仅仅关注科技的运用,更注重为居民提供多元化的增值服务与人文关怀。社区内设有互动LED像素灯、顶层花园控制喷泉等创意设施,不仅美化了社区环境,还增强了居民的归属感与幸福感。同时,社区还提供了智能家居的可选追加项,如空气净化器、远程监控摄像机等,让居民能够根据自己的需求进行个性化选择。 智慧社区还充分利用大数据技术,对居民的行为数据进行收集与分析,为居民提供精准化的营销服务。无论是周边的商业信息推送,还是个性化的生活建议,都能让居民感受到社区的智慧与贴心。此外,社区还注重培养居民的环保意识与节能意识,通过智能照明、智能温控等系统的运用,鼓励居民节约资源、保护环境。 三、智慧社区的未来发展与无限可能 智慧社区的未来发展充满了无限可能。随着技术的不断进步与创新,智慧社区将朝着更加智能化、融合化的方向发展。比如,利用人工智能技术进行社区管理与服务,将能够进一步提升社区的智能化水平;而5G、物联网等新技术的运用,则将让智慧社区的连接更加紧密、服务更加高效。 同时,智慧社区还将更加注重居民的体验与需求,通过不断优化智能化设备的功能与服务,让居民享受到更加便捷、舒适的生活。未来,智慧社区将成为人们追求高品质生活的重要选择之一,它不仅是一个居住的空间,更是一个融合了科技、服务、人文关怀的综合性生态系统,让人们的生活更加美好、更加精彩。 综上所述,智慧社区整体解决方案以其科技魅力、增值服务与人文关怀以及未来发展潜力,正吸引着越来越多的关注与认可。它不仅能够提升社区的管理效率与居民的生活品质,更能够为社区的可持续发展注入新的活力与动力。

    云上考场系统 2024免费JAVA微信小程序毕设

    2024免费微信小程序毕业设计成品,包括源码+数据库+往届论文资料,附带启动教程和安装包。 启动教程:https://www.bilibili.com/video/BV1BfB2YYEnS 讲解视频:https://www.bilibili.com/video/BV1BVKMeZEYr 技术栈:Uniapp+Vue.js+SpringBoot+MySQL。 开发工具:Idea+VSCode+微信开发者工具。

    回测模型示例(非实盘交易策略) #HS300日线下运行,20个交易日进行 一次调仓,每次买入在买入备选中因子评分前10的股票,每支股票各分配当前可用资金的10%(权重可调整) #扩展数据需要在补完HS

    回测模型示例(非实盘交易策略) #HS300日线下运行,20个交易日进行 一次调仓,每次买入在买入备选中因子评分前10的股票,每支股票各分配当前可用资金的10%(权重可调整) #扩展数据需要在补完HS300成分股数据之后生成,本模型中扩展数据暂时使用VBA指标ATR和ADTM生成,命名为atr和adtm

    Matlab Simulink 下的 Buck和Boost型双向DC-DC变换器:电压电流双闭环PI控制,恒功率负载,优质波形,2020b版本专业搭建,MATLAB Simulink下的Buck与Bo

    Matlab Simulink 下的 Buck和Boost型双向DC-DC变换器:电压电流双闭环PI控制,恒功率负载,优质波形,2020b版本专业搭建,MATLAB Simulink下的Buck与Boost型双向DC-DC变换器:电压电流双闭环PI控制,恒功率负载,优质波形,20b版本全新搭建,matlab simulink:buck型降压双向dc dc变器和boost型升压双向dc dc变器,均采用电压电流双闭环PI控制,负载为恒功率负载,波形质量良好,可自行调试参数 版本matlab2020b,所有部分均由simulink模块搭建,由于部分模块低版本没有,因此只能用20b或以上版本 ,核心关键词: 1. Buck型降压双向DC-DC变换器 2. Boost型升压双向DC-DC变换器 3. 电压电流双闭环PI控制 4. 恒功率负载 5. 波形质量 6. Matlab 2020b 7. Simulink模块搭建 8. 模块版本要求,Matlab Simulink下的双向DC-DC变换器设计与参数调试研究

    购物系统 2024免费JAVA微信小程序毕设

    2024免费微信小程序毕业设计成品,包括源码+数据库+往届论文资料,附带启动教程和安装包。 启动教程:https://www.bilibili.com/video/BV1BfB2YYEnS 讲解视频:https://www.bilibili.com/video/BV1BVKMeZEYr 技术栈:Uniapp+Vue.js+SpringBoot+MySQL。 开发工具:Idea+VSCode+微信开发者工具。

    COMSOL环境下应力作用下瓦斯渗透运移模型的建立及研究-流固耦合物理场的分析与PDE+结构力学模块应用,应力作用下COMSOL岩层开挖瓦斯渗透运移模型:流固耦合物理场考虑与PDE+结构力学模块应用

    COMSOL环境下应力作用下瓦斯渗透运移模型的建立及研究——流固耦合物理场的分析与PDE+结构力学模块应用,应力作用下COMSOL岩层开挖瓦斯渗透运移模型:流固耦合物理场考虑与PDE+结构力学模块应用研究,comsol岩层开挖作用下瓦斯渗透运移模型,考虑应力作用下的渗透率变化,流固耦合物理场,使用pde+结构力学模块,参考相关文献建立。 ,核心关键词:COMSOL;岩层开挖;瓦斯渗透运移模型;应力作用;渗透率变化;流固耦合物理场;PDE+结构力学模块;参考文献。,应力作用下瓦斯渗透运移模型研究

    DeepSeek Coder 2开源编码模型.pdf

    deepseek最新资讯、配置方法、使用技巧,持续更新中

    电动滑板车电池建模研究:基于MATLAB Simulink的电池与电容模块、BMS模块及仿真参数可视化分析,电动滑板车电池的MATLAB Simulink建模与仿真:涵盖电池与电容模块、BMS管理及参

    电动滑板车电池建模研究:基于MATLAB Simulink的电池与电容模块、BMS模块及仿真参数可视化分析,电动滑板车电池的MATLAB Simulink建模与仿真:涵盖电池与电容模块、BMS管理及参数可视化,电动滑板车的电池建模 MATLAB Simulink模型 包括电池与电容模块、电池管理系统BMS模块、仿真参数可视化等 ,电动滑板车电池建模; MATLAB Simulink模型; 电池与电容模块; BMS模块; 仿真参数可视化,基于MATLAB的电动滑板车电池建模与仿真

    永磁同步电机模型预测转矩控制(MPTC)的最优电压矢量实时计算研究参考 参考文章:作者未给出具体的参考文献 可能涉及的领域包括电机控制理论、电力电子技术和自动控制原理等 ,永磁同步电机的模型预测转

    永磁同步电机模型预测转矩控制(MPTC)的最优电压矢量实时计算研究参考 参考文章:作者未给出具体的参考文献。可能涉及的领域包括电机控制理论、电力电子技术和自动控制原理等。,永磁同步电机的模型预测转矩控制MPTC:优化电压矢量选择与直接转矩控制的对比研究参考文献:[具体文献名],永磁同步电机模型预测转矩控制MPTC MPTC采用实时在线计算的方式确保预施加的电压矢量为最优电压矢量,与直接转矩控制相比,该方法选取的电压矢量更为合理有效。 提供对应的参考文献; ,关键词:永磁同步电机模型;预测转矩控制(MPTC);实时在线计算;最优电压矢量;直接转矩控制。,永磁同步电机MPTC模型预测转矩控制及其电压矢量优化研究

    xorg-x11-fonts-ISO8859-1-100dpi-7.5-9.el7.x64-86.rpm.tar.gz

    1、文件内容:xorg-x11-fonts-ISO8859-1-100dpi-7.5-9.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/xorg-x11-fonts-ISO8859-1-100dpi-7.5-9.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊

    基于浣熊优化算法与多通信半径跳距加权策略的改进Dvhop定位算法研究及性能对比分析,MATLAB: 基于浣熊优化算法与多参数加权策略改进的Dvhop定位算法对比研究报告,matlab:基于浣熊优化算法

    基于浣熊优化算法与多通信半径跳距加权策略的改进Dvhop定位算法研究及性能对比分析,MATLAB: 基于浣熊优化算法与多参数加权策略改进的Dvhop定位算法对比研究报告,matlab:基于浣熊优化算法的多通信半径和跳距加权的改进Dvhop定位算法 - 将浣熊优化算法COA用于Dvhop定位估计,并加入了多通信半径和跳距加权策略 - 将原始Dvhop、COA-Dvhop以及本资源算法进行对比 - 对比1:在不同锚节点比例下,对三种算法进行归一化定位误差对比 - 对比2:在不同通信半径下,对三种算法进行归一化定位误差对比 - 对比3:在不同总节点数下,对三种算法进行归一化定位误差对比 - 注释详细 ,基于浣熊优化算法; 多通信半径; 跳距加权; Dvhop定位算法; 归一化定位误差对比。,基于COA的改进Dvhop定位算法:多通信半径与跳距加权优化

    ML.net检测诈骗短信测试项目

    文件内包含训练数据,以及训练好的模型,和模型调用方法

    基于模糊逻辑的并联式混合动力车辆控制策略(含WLTC、NEDC工况仿真效果):发动机与电机转矩变化、档位与电池SOC动态调整,百公里燃油消耗与速度跟随性能优化 ,基于模糊逻辑的并联式混合动力车辆控制策

    基于模糊逻辑的并联式混合动力车辆控制策略(含WLTC、NEDC工况仿真效果):发动机与电机转矩变化、档位与电池SOC动态调整,百公里燃油消耗与速度跟随性能优化。,基于模糊逻辑的并联式混合动力车辆控制策略:工况下的发动机与电机转矩分配及整车性能仿真研究,基于模糊逻辑的并联式混合动力车辆控制策略 ①(工况可自行添加)已有WLTC、NEDC工况; ②仿真图像包括 发动机转矩变化图像、电机转矩变化图像、档位变化图像、电池SOC变化图像、等效百公里燃油消耗量图像、速度跟随图像、车速变化图像; ③整车similink模型中包含工况输入模型、发动机模型、电机模型、制动能量回收模型、转矩分配模型、档位切模型纵向动力学模型. 仿真效果良好 ,基于模糊逻辑的混合动力控制策略;WLTC、NEDC工况;仿真图像;转矩变化图像;档位变化图像;电池SOC变化;等效百公里燃油消耗;速度跟随;车速变化;整车simulink模型;工况输入模型;发动机模型;电机模型;制动能量回收模型;转矩分配模型;档位切换模型纵向动力学模型。,基于模糊逻辑的混合动力车辆控制策略:多模型协同仿真与工况优化

    自适应蚁群优化算法AACO:融合六大改进策略,栅格路径规划的新突破,改进自适应蚁群优化算法:融合多重改进策略应用于栅格路径规划,改进蚁群优化算法(AACO,自己改进的蚁群优化算法) 改进策略包括如下

    自适应蚁群优化算法AACO:融合六大改进策略,栅格路径规划的新突破,改进自适应蚁群优化算法:融合多重改进策略应用于栅格路径规划,改进蚁群优化算法(AACO,自己改进的蚁群优化算法) 改进策略包括如下,主要自适应思想 1.自适应信息素重要度因子,自适应阿尔法 2.自适应启发式因子,自适应贝塔 3.改进启发函数 4.信息素奖惩机制 5.自适应挥发系数 6.3次B样条曲线平滑路径 融合这6个改进后的蚁群算法,被应用在解决栅格路径规划,效果如下。 拿后AACO后,ACO、EACO(精英蚁)和AS(序列蚁群)程序都有。 看完AACO代码后,您会对ACO算法有更加清晰的认识,以及如何改进,有利于二次开发优化。 再次优化之处(曲线平滑后路径是更短的,并没有输出,其次曲线会有一定波动,并没有在最优解处收敛) 智能优化算法不可避免每次运行结果不同,多次运行,取最优值即可。 ,AACO; 自适应思想; 改进策略; 自适应信息素重要度因子; 自适应阿尔法; 自适应启发式因子; 改进启发函数; 信息素奖惩机制; 自适应挥发系数; 3次B样条曲线平滑路径; 栅格路径规划; ACO算法; EACO; AS序列蚁群

    DeepSeek R1 与 V3:两种 AI 模型的正面比较.pdf

    deepseek最新资讯、配置方法、使用技巧,持续更新中

Global site tag (gtag.js) - Google Analytics