1.Lua5.4 源码剖析——虚拟机6 之 OpCode大全
2.java中代码注释快捷键(java的源码注释快捷键)
3.idea格式化代码设置(idea的格式化)
4.请问哪位有模拟退火遗传算法的源程序?
Lua5.4 源码剖析——虚拟机6 之 OpCode大全
深入探索Lua5.4虚拟机的奥秘——OpCode大揭秘 在Lua5.4的世界里,多个精心设计的源码OpCode构成了其强大的指令集,它们像乐谱上的源码音符,驱动着程序的源码旋律。让我们一起走入Lua5.4的源码虚拟机,逐个解析这些关键的源码药品溯源码查询 用什么扫指令代码单元。数据加载乐章
首先,源码我们来到数据加载的源码舞台,OpCode在这里翩翩起舞:OP_MOVE: 轻盈地将值从一个寄存器转移到另一个,源码就像调色板上的源码颜色流转。
OP_LOADI/OP_LOADF/OP_LOADK/OP_LOADKX: 数字的源码音符——整数、浮点数、源码常量和UpValue,源码一一奏响。源码
OP_LOADTRUE/OP_LOADFALSE: 布尔值的源码二元抉择,为逻辑运算注入力量。
OP_LOADNIL/OP_GETUPVALUE/OP_GETTABUP: 无尽的赋值之路,从零开始,直至无穷。
算术运算交响曲
接着,我们进入算术运算的篇章,OpCode在此处激荡:从简单的OP_ADDK(R[A]:=R[B]+K[C])到OP_SUBK、OP_MULK、OP_MODK,再到OP_POWK和OP_DIVK,每个都是音符间的和谐对话。
直接数字运算,如OP_ADDI(R[A] = R[B] + sC),界限清晰,无需预存,如音乐中的即兴演奏。
寄存器间的算术运算,如OP_ADD、OP_SUB等,像弦乐四重奏中的协奏。
位运算与Table操作
然后,我们步入位运算和Table操作的篇章,它们是程序逻辑的精密齿轮:OP_BANDK、OP_BORK和OP_BXORK,与数字或寄存器进行二进制对话,像编钟的和谐共鸣。
OP_SHL和OP_SHR,位移的旋律,为数据结构增添深度。
OP_NEWTABLE创生新表,OP_GETI/GETFIELD/GETTABLE查询信息,OP_SETI/SETFIELD/SETTABLE则进行修改,像编排一场数据舞蹈。
元方法与函数调用
接下来,元方法与函数调用的乐章,OpCode在其中担任指挥:MMBIN、MMBINI和MMBINK,元方法调用的三种旋律,为对象赋予魔法。
OP_CALL和OP_TAILCALL,函数调用的起始与结束,像指挥家的挥棒和收棒。
OP_VARARGPREP和OP_VARARG,scanf 源码 linux处理可变参数,为函数调用增添变奏。
跳转与控制流
最后,我们来到指令的跳跃和控制流部分,OP_JMP如同指挥棒,引导程序的旋律:OP_JMP的精确跳跃,如同乐章的节奏变化,控制程序的进程。
在Lua 5.4中,goto的加入,让程序的流程更加灵活。
等式判断与循环
等式判断与循环的OpCode,如同交响乐的高潮,丰富而有力:OP_EQ、OP_LT、OP_LE、OP_GTI、OP_GEI,比较与判断,赋予逻辑深度。
OP_TEST和OP_TESTSET,条件判断与赋值的巧妙结合。
OP_FORPREP和OP_TFORPREP,循环的启动与准备,OP_FORLOOP和OP_TFORCALL,执行旋律的反复。
杂项OpCode的精彩点缀
最后,8个杂项OpCode为乐章画上完满的句号:OP_UNM:数值取负,反转音符的旋律。
OP_BNOT:位取反,逻辑的翻转。
OP_NOT:条件取反,为逻辑增添复杂性。
OP_LEN:求对象长度,探索数据的深度。
OP_CONCAT:字符串拼接,连接旋律的片段。
OP_SETLIST:创建列表,初始化的序曲。
深入理解Lua5.4的OpCode,就像欣赏一场丰富的音乐盛宴,每一个音符都蕴含着程序的智慧与力量。让我们沉浸在这奇妙的虚拟机世界,继续探索更深层次的编程奥秘。祝你乐在其中,收获满满!java中代码注释快捷键(java的注释快捷键)
1. java的注释快捷键
1、第一首先要是java的代码很乱的话。按shift+Ctrl+F可以进行整理;格式整理化:shift+Ctrl+F。
2、第二然后想要在写java代码轻松。按Alt+/。java代码智能提示:Alt+/。
3、第三然后在java的代码中,移动某段代码。按Alt+方向键;移动代码:Alt+方向键。
4、查看 网页源码第四然后快速写出main方法代码。按main+Alt+/。
5、第五然后写出输出的语句的快捷方法。先输入Syso,再按Alt+/。
6、第六然后对代码进行注释。单行注释按:Ctrl+/;多行注释按:Shift+Ctrl+/。
2. JAVA注释快捷键
注解就是元数据,即一种描述数据的数据。所以,可以说注解就是源代码的元数据。 注解可以声明注解在编译过程或执行时产生作用。 在使用注解之前,程序源数据只是通过java注释和javadoc,但是注解提供的功能要远远超过这些。注解不仅包含了元数据,它还可以作用于程序运行过程中、注解解释器可以通过注解决定程序的执行顺序。例如,在Jersey webservice 我们为方法添加URI字符串的形式的**PATH**注解,那么在程序运行过程中jerser解释程序将决定该方法去调用所给的URI。
3. java文档注释快捷键idea
IntelliJ Idea 常用快捷键列表
Alt+Insert,可以新建文件、生成构造器、生成Getter/Setter等
Shift+F6,重构 – 重命名
Ctrl+X,剪切行
Ctrl+D,复制行
Ctrl+Alt+V,可以引入变量。例如:new String(); 自动导入变量定义
Ctrl+P,可以显示参数信息
Ctrl+F,可以显示当前文件的结构
Ctrl+Alt+T,可以把代码包在一个块内,例如:try/catch
Ctrl+Alt+L,格式化代码
Ctrl+Alt+O,优化导入的类和包
Ctrl+Shift+Space,自动补全代码
Ctrl+空格,代码提示(与系统输入法快捷键冲突)
Alt+Shift+Up/Down,上/下移一行
Ctrl+/或Ctrl+Shift+/,注释(//或者/**/)
Ctrl+J,自动代码(例如:serr)
Ctrl+H,显示类结构图(类的继承层次)
Ctrl+Q,显示注释文档
Alt+F1,查找代码所在位置
Alt+1,快速打开或隐藏工程面板
Ctrl+Alt+left/right,返回至上次浏览的位置
Alt+left/right,切换代码视图
Alt+Up/Down,在方法间快速移动定位
Ctrl+Shift+Up/Down,向上/下移动语句
F2 或 Shift+F2,高亮错误或警告快速定位
Tab,代码标签输入完成后,按 Tab,生成代码
Ctrl+Shift+F7,高亮显示所有该文本,按 Esc 高亮消失
Alt+F3,拳皇咆哮源码逐个往下查找相同文本,并高亮显示
Ctrl+Up/Down,光标中转到第一行或最后一行下
Ctrl+B/Ctrl+Click,快速打开光标处的类或方法(跳转到定义处)
Ctrl+Alt+B,跳转到方法实现处
Ctrl+Shift+Backspace,跳转到上次编辑的地方
Ctrl+O,重写方法
Ctrl+Alt+Space,类名自动完成
Ctrl+Alt+Up/Down,快速跳转搜索结果
Ctrl+Shift+J,整合两行
Alt+F8,计算变量值
Ctrl+Shift+V,可以将最近使用的剪贴板内容选择插入到文本
Ctrl+Alt+Shift+V,简单粘贴
Shift+Esc,不仅可以把焦点移到编辑器上,而且还可以隐藏当前(或最后活动的)工具窗口
F,把焦点从编辑器移到最近使用的工具窗口
Shift+F1,要打开编辑器光标字符处使用的类或者方法 Java 文档的浏览器
Ctrl+W,可以选择单词记忆语句继续行继而函数
Ctrl+Shift+W,取消选择光标所在词
Alt+F7,查找整个工程中使用的某一个类、方法或者变量的位置
Ctrl+I,实现方法
Ctrl+Shift+U,大小写转化
Ctrl+Y,删除当前行
Shift+Enter,向下插入新行
psvm/sout,main/System.out.println(); Ctrl+J,查看更多
Ctrl+Shift+F,全局查找
Ctrl+F,查找/Shift+F3,向上查找/F3,向下查找
Ctrl+Shift+S,高级搜索
Ctrl+U,转到父类
Ctrl+Alt+S,打开设置对话框
Alt+Shift+Inert,开启/关闭列选择模式
Ctrl+Alt+Shift+S,打开当前项目/模块属性
Ctrl+G,定位行
Alt+Home,跳转到导航栏
Ctrl+Enter,上插一行
Ctrl+Backspace,按单词删除
Ctrl+”+/-”,当前方法展开、折叠
Ctrl+Shift+”+/-”,全部展开、折叠
调试部分、编译
Ctrl+F2,停止
Alt+Shift+F9,选择 Debug
Alt+Shift+F,选择 Run
Ctrl+Shift+F9,编译
Ctrl+Shift+F,运行
Ctrl+Shift+F8,查看断点
F8,不过
F7,步入
Shift+F7,智能步入
Shift+F8,步出
Alt+Shift+F8,强制步过
Alt+Shift+F7,强制步入
Alt+F9,bsp 树源码运行至光标处
Ctrl+Alt+F9,强制运行至光标处
F9,恢复程序
Alt+F,定位到断点
Ctrl+F8,切换行断点
Ctrl+F9,生成项目
Alt+1,项目
Alt+2,收藏
Alt+6,TODO
Alt+7,结构
Ctrl+Shift+C,复制路径
Ctrl+Alt+Shift+C,复制引用,必须选择类名
Ctrl+Alt+Y,同步
Ctrl+~,快速切换方案(界面外观、代码风格、快捷键映射等菜单)
Shift+F,还原默认布局
Ctrl+Shift+F,隐藏/恢复所有窗口
Ctrl+F4,关闭
Ctrl+Shift+F4,关闭活动选项卡
Ctrl+Tab,转到下一个拆分器
Ctrl+Shift+Tab,转到上一个拆分器
重构
Ctrl+Alt+Shift+T,弹出重构菜单
Shift+F6,重命名
F6,移动
F5,复制
Alt+Delete,安全删除
Ctrl+Alt+N,内联
查找
Ctrl+F,查找
Ctrl+R,替换
F3,查找下一个
Shift+F3,查找上一个
Ctrl+Shift+F,在路径中查找
Ctrl+Shift+R,在路径中替换
Ctrl+Shift+S,搜索结构
Ctrl+Shift+M,替换结构
Alt+F7,查找用法
Ctrl+Alt+F7,显示用法
Ctrl+F7,在文件中查找用法
Ctrl+Shift+F7,在文件中高亮显示用法
4. java里面注释快捷键
1 安卓逻辑层可以用Java实现,所以注释用:/**写上注释**/
2 安卓布局是xml文件,所以注释用:<--写上注释-->
5. java注释的三种方法 以及快捷键的使用
1.
首先,在电脑上打开Eclipse软件,之后在软件中打开要编辑的java代码页面。
2.
然后,一直按住鼠标左键并移动来选中要去掉的注释代码段。
3.
最后,用鼠标右键单击选中的注释代码段,在弹出的菜单中依次点击Source选项——Remove Block Comment选项,这样就可以快速取消注释。
4.
另外,还可以使用快捷键Ctrl+Shift+/来快速添加注释,也可以使用Ctrl+Shift+\来快速取消注释。
6. java注释快捷键idea
@是注解的前缀标签,许多的框架,包括spring,springboot等,其功能都使用到了注解去实现,如@Controller,@Service等
idea格式化代码设置(idea的格式化)
1. idea的格式化
代码保存成文件 需要经过预处理,编译,汇编,链接
一:预处理
预处理主要是处理源代码中以#开始的预编译指令,比如#include,#define
将所有的#define删除,展开宏定义
处理所有的条件编译指令#if,#ifdef,#elif,#else,#endif
处理#include预编译指令,将被包含的头文件插入该预编译指令的位置,是个递归的过程
删除所有的注释 //与/**/
添加行号与文件名表示,用于调试符号与编译错误或警告报错
保留#pragma编译指令,改指令 编译器需要使用
二:编译
编译过程就是把预编译生成的文件进行一系列词法分析(也叫扫描),语法分析,语义分析,源代码优化,汇编代码生成,目标代码优化
词法分析:根据分隔符,将代码分割成一系列的记号
比如: int a = (a+3)*(2+5);
将会 变成以下记号: int,a,=,(,a,+,3,),(,2,+,5,)
词法分析产生的记号可以分为:关键字,标识符,字面量(数字,字符串,即常量),特殊符号(加号,等号等),在识别记号时,会将标识符放入符号表,字面量放入文字表
语法分析:根据记号进行语法分析,产生语法树,整个分析过程采用上下文无关语法(语法树就是以表达式为节点的树),仅仅是完成对表达式的语法层面进行分析
语义分析:语义分析对语法树中的表达式标识类型,对于类型不匹配,编译器将会报错,如果有些类型需要做隐式转换,将会在语法树中插入对应的节点
源代码优化生成汇编代码:int a = (a+3)*(2+5); 将会被优化为int a = (a+3)*(7)
三:汇编
汇编即根据汇编指令翻译为机器指令
四:链接
链接主要包含 地址和空间分配,符号决议,重定位
2. idea如何调整代码格式
java源代码是txt格式的.java文件,用记事本就可以打开。 用eclipse打开java文件的方式是: 如果java文件是一个eclipse工程(根目录带有.project文件),用file/import/general/exist java project/(大概是)然后找到你的目录。 否则需要自己新建一个工程file/new/java project 然后把java文件拷贝到.src目录下。
.class文件是直接的编译好的文件,可以用jad把.class文件反编译成java文件,不过反编译的代码和原来的代码不一定完全一样。
3. idea中如何格式化代码
IntelliJ Idea 常用快捷键列表
Alt+Insert,可以新建文件、生成构造器、生成Getter/Setter等
Shift+F6,重构 – 重命名
Ctrl+X,剪切行
Ctrl+D,复制行
Ctrl+Alt+V,可以引入变量。例如:new String(); 自动导入变量定义
Ctrl+P,可以显示参数信息
Ctrl+F,可以显示当前文件的结构
Ctrl+Alt+T,可以把代码包在一个块内,例如:try/catch
Ctrl+Alt+L,格式化代码
Ctrl+Alt+O,优化导入的类和包
Ctrl+Shift+Space,自动补全代码
Ctrl+空格,代码提示(与系统输入法快捷键冲突)
Alt+Shift+Up/Down,上/下移一行
Ctrl+/或Ctrl+Shift+/,注释(//或者/**/)
Ctrl+J,自动代码(例如:serr)
Ctrl+H,显示类结构图(类的继承层次)
Ctrl+Q,显示注释文档
Alt+F1,查找代码所在位置
Alt+1,快速打开或隐藏工程面板
Ctrl+Alt+left/right,返回至上次浏览的位置
Alt+left/right,切换代码视图
Alt+Up/Down,在方法间快速移动定位
Ctrl+Shift+Up/Down,向上/下移动语句
F2 或 Shift+F2,高亮错误或警告快速定位
Tab,代码标签输入完成后,按 Tab,生成代码
Ctrl+Shift+F7,高亮显示所有该文本,按 Esc 高亮消失
Alt+F3,逐个往下查找相同文本,并高亮显示
Ctrl+Up/Down,光标中转到第一行或最后一行下
Ctrl+B/Ctrl+Click,快速打开光标处的类或方法(跳转到定义处)
Ctrl+Alt+B,跳转到方法实现处
Ctrl+Shift+Backspace,跳转到上次编辑的地方
Ctrl+O,重写方法
Ctrl+Alt+Space,类名自动完成
Ctrl+Alt+Up/Down,快速跳转搜索结果
Ctrl+Shift+J,整合两行
Alt+F8,计算变量值
Ctrl+Shift+V,可以将最近使用的剪贴板内容选择插入到文本
Ctrl+Alt+Shift+V,简单粘贴
Shift+Esc,不仅可以把焦点移到编辑器上,而且还可以隐藏当前(或最后活动的)工具窗口
F,把焦点从编辑器移到最近使用的工具窗口
Shift+F1,要打开编辑器光标字符处使用的类或者方法 Java 文档的浏览器
Ctrl+W,可以选择单词记忆语句继续行继而函数
Ctrl+Shift+W,取消选择光标所在词
Alt+F7,查找整个工程中使用的某一个类、方法或者变量的位置
Ctrl+I,实现方法
Ctrl+Shift+U,大小写转化
Ctrl+Y,删除当前行
Shift+Enter,向下插入新行
psvm/sout,main/System.out.println(); Ctrl+J,查看更多
Ctrl+Shift+F,全局查找
Ctrl+F,查找/Shift+F3,向上查找/F3,向下查找
Ctrl+Shift+S,高级搜索
Ctrl+U,转到父类
Ctrl+Alt+S,打开设置对话框
Alt+Shift+Inert,开启/关闭列选择模式
Ctrl+Alt+Shift+S,打开当前项目/模块属性
Ctrl+G,定位行
Alt+Home,跳转到导航栏
Ctrl+Enter,上插一行
Ctrl+Backspace,按单词删除
Ctrl+”+/-”,当前方法展开、折叠
Ctrl+Shift+”+/-”,全部展开、折叠
调试部分、编译
Ctrl+F2,停止
Alt+Shift+F9,选择 Debug
Alt+Shift+F,选择 Run
Ctrl+Shift+F9,编译
Ctrl+Shift+F,运行
Ctrl+Shift+F8,查看断点
F8,不过
F7,步入
Shift+F7,智能步入
Shift+F8,步出
Alt+Shift+F8,强制步过
Alt+Shift+F7,强制步入
Alt+F9,运行至光标处
Ctrl+Alt+F9,强制运行至光标处
F9,恢复程序
Alt+F,定位到断点
Ctrl+F8,切换行断点
Ctrl+F9,生成项目
Alt+1,项目
Alt+2,收藏
Alt+6,TODO
Alt+7,结构
Ctrl+Shift+C,复制路径
Ctrl+Alt+Shift+C,复制引用,必须选择类名
Ctrl+Alt+Y,同步
Ctrl+~,快速切换方案(界面外观、代码风格、快捷键映射等菜单)
Shift+F,还原默认布局
Ctrl+Shift+F,隐藏/恢复所有窗口
Ctrl+F4,关闭
Ctrl+Shift+F4,关闭活动选项卡
Ctrl+Tab,转到下一个拆分器
Ctrl+Shift+Tab,转到上一个拆分器
重构
Ctrl+Alt+Shift+T,弹出重构菜单
Shift+F6,重命名
F6,移动
F5,复制
Alt+Delete,安全删除
Ctrl+Alt+N,内联
查找
Ctrl+F,查找
Ctrl+R,替换
F3,查找下一个
Shift+F3,查找上一个
Ctrl+Shift+F,在路径中查找
Ctrl+Shift+R,在路径中替换
Ctrl+Shift+S,搜索结构
Ctrl+Shift+M,替换结构
Alt+F7,查找用法
Ctrl+Alt+F7,显示用法
Ctrl+F7,在文件中查找用法
Ctrl+Shift+F7,在文件中高亮显示用法
4. idea 格式化代码
1、编辑
Ctrl + Space 基本的代码完成(类、方法、属性)
Ctrl + Alt + Space 快速导入任意类
Ctrl + Shift + Enter 语句完成
Ctrl + P 参数信息(在方法中调用参数)
Ctrl + Q 快速查看文档
F1 外部文档
Shift + F1 外部文档,进入web文档主页
Ctrl + Shift + Z --> Redo 重做
Ctrl + 鼠标 简介/进入代码定义
Ctrl + F1 显示错误描述或警告信息
Alt + Insert 自动生成代码
Ctrl + O 重新方法
Ctrl + Alt + T 选中
Ctrl + / 行注释/取消行注释
Ctrl + Shift + / 块注释
Ctrl + W 选中增加的代码块
Ctrl + Shift + W 回到之前状态
Ctrl + Shift + ]/[ 选定代码块结束、开始
Alt + Enter 快速修正
Ctrl + Alt + L 代码格式化
Ctrl + Alt + O 优化导入
Ctrl + Alt + I 自动缩进
Tab / Shift + Tab 缩进、不缩进当前行
Ctrl+X/Shift+Delete 剪切当前行或选定的代码块到剪贴板
Ctrl+C/Ctrl+Insert 复制当前行或选定的代码块到剪贴板
Ctrl+V/Shift+Insert 从剪贴板粘贴
Ctrl + Shift + V 从最近的缓冲区粘贴
Ctrl + D 复制选定的区域或行
Ctrl + Y 删除选定的行
Ctrl + Shift + J 添加智能线
Ctrl + Enter 智能线切割
Shift + Enter 另起一行
Ctrl + Shift + U 在选定的区域或代码块间切换
Ctrl + Delete 删除到字符结束
Ctrl + Backspace 删除到字符开始
Ctrl + Numpad+/- 展开/折叠代码块(当前位置的:函数,注释等)
Ctrl + shift + Numpad+/- 展开/折叠所有代码块
Ctrl + F4 关闭运行的选项卡
2、查找/替换(Search/Replace)
F3 下一个
Shift + F3 前一个
Ctrl + R 替换
Ctrl + Shift + F 或者连续2次敲击shift 全局查找{ 可以在整个项目中查找某个字符串什么的,如查找某个函数名字符串看之前是怎么使用这个函数的}
Ctrl + Shift + R 全局替换
3、运行(Running)
Alt + Shift + F 运行模式配置
Alt + Shift + F9 调试模式配置
Shift + F 运行
Shift + F9 调试
Ctrl + Shift + F 运行编辑器配置
Ctrl + Alt + R 运行manage.py任务
4、调试(Debugging)
F8 跳过
F7 进入
Shift + F8 退出
Alt + F9 运行游标
Alt + F8 验证表达式
Ctrl + Alt + F8 快速验证表达式
F9 恢复程序
Ctrl + F8 断点开关
Ctrl + Shift + F8 查看断点
5、导航(Navigation)
Ctrl + N 跳转到类
Ctrl + Shift + N 跳转到符号
Alt + Right/Left 跳转到下一个、前一个编辑的选项卡
F 回到先前的工具窗口
Esc 从工具窗口回到编辑窗口
Shift + Esc 隐藏运行的、最近运行的窗口
Ctrl + Shift + F4 关闭主动运行的选项卡
Ctrl + G 查看当前行号、字符号
Ctrl + E 当前文件弹出,打开最近使用的文件列表
Ctrl+Alt+Left/Right 后退、前进
Ctrl+Shift+Backspace 导航到最近编辑区域
Alt + F1 查找当前文件或标识
Ctrl+B / Ctrl+Click 跳转到声明
Ctrl + Alt + B 跳转到实现
Ctrl + Shift + I 查看快速定义
Ctrl + Shift + B 跳转到类型声明
Ctrl + U 跳转到父方法、父类
Alt + Up/Down 跳转到上一个、下一个方法
Ctrl + ]/[ 跳转到代码块结束、开始
Ctrl + F 弹出文件结构
Ctrl + H 类型层次结构
Ctrl + Shift + H 方法层次结构
Ctrl + Alt + H 调用层次结构
F2 / Shift + F2 下一条、前一条高亮的错误
F4 / Ctrl + Enter 编辑资源、查看资源
Alt + Home 显示导航条F书签开关
Ctrl + Shift + F 书签助记开关
Ctrl + #[0-9] 跳转到标识的书签
Shift + F 显示书签
6、搜索相关(Usage Search)
Alt + F7/Ctrl + F7 文件中查询用法
Ctrl + Shift + F7 文件中用法高亮显示
Ctrl + Alt + F7 显示用法
7、重构(Refactoring)
F5复制F6剪切
Alt + Delete 安全删除
Shift + F6 重命名
Ctrl + F6 更改签名
Ctrl + Alt + N 内联
Ctrl + Alt + M 提取方法
Ctrl + Alt + V 提取属性
Ctrl + Alt + F 提取字段
Ctrl + Alt + C 提取常量
Ctrl + Alt + P 提取参数
8、控制VCS/Local History
Ctrl + K 提交项目
Ctrl + T 更新项目
Alt + Shift + C 查看最近的变化
Alt + BackQuote(’)VCS 快速弹出
9、模版(Live Templates)
Ctrl + Alt + J 当前行使用模版
Ctrl +J 插入模版
、基本(General)
Alt + #[0-9] 打开相应的工具窗口
Ctrl + Alt + Y 同步
Ctrl + Shift + F 最大化编辑开关
Alt + Shift + F 添加到最喜欢
Alt + Shift + I 根据配置检查当前文件
Ctrl + BackQuote(’) 快速切换当前计划
Ctrl + Alt + S 打开设置页
Ctrl + Shift + A 查找编辑器里所有的动作
Ctrl + Tab 在窗口间进行切换
Mac快捷键大全
Mac键盘符号和修饰键说明
CommandShiftOptionControlReturn/EnterDelete向前删除键(Fn+Delete)↑ 上箭头
↓ 下箭头
← 左箭头
→ 右箭头
Page Up(Fn+↑)Page Down(Fn+↓)Home Fn + ←
End Fn + →
右制表符(Tab键)左制表符(Shift+Tab)Escape (Esc)Editing(编辑)
Space 基本的代码补全(补全任何类、方法、变量)Space 智能代码补全(过滤器方法列表和变量的预期类型)自动结束代码,行末自动添加分号P 显示方法的参数信息J, Mid. button click 快速查看文档F1 查看外部文档(在某些代码上会触发打开浏览器显示相关文档)+鼠标放在代码上 显示代码简要信息F1 在错误或警告处显示具体描述信息N, N 生成代码(getter、setter、构造函数、hashCode/equals,toString)O 覆盖方法(重写父类方法)I 实现方法(实现接口中的方法)T 包围代码(使用if.else, try.catch, for, synchronized等包围选中的代码)/ 注释/取消注释与行注释/ 注释/取消注释与块注释↑ 连续选中代码块↓ 减少当前选中的代码块Q 显示上下文信息显示意向动作和快速修复代码L 格式化代码O 优化importI 自动缩进线/ ? 缩进代码 / 反缩进代码X 剪切当前行或选定的块到剪贴板C 复制当前行或选定的块到剪贴板V 从剪贴板粘贴V 从最近的缓冲区粘贴D 复制当前行或选定的块删除当前行或选定的块的行J 智能的将代码拼接成一行智能的拆分拼接的行开始新的一行U 大小写切换] / ?[ 选择直到代码块结束/开始删除到单词的末尾(?键为Fn+Delete)删除到单词的开头+ / ?- 展开 / 折叠代码块+ 展开所以代码块- 折叠所有代码块W 关闭活动的编辑器选项卡Search/Replace(查询/替换)
Double ? 查询任何东西
F 文件内查找G 查找模式下,向下查找G 查找模式下,向上查找R 文件内替换F 全局查找(根据路径)R 全局替换(根据路径)S 查询结构(Ultimate Edition 版专用,需要在Keymap中设置)M 替换结构(Ultimate Edition 版专用,需要在Keymap中设置)Usage Search(使用查询)
F7 / ?F7 在文件中查找用法 / 在类中查找用法F7 在文件中突出显示的用法F7 显示用法Compile and Run(编译和运行)
F9 编译ProjectF9 编译选择的文件、包或模块R 弹出 Run 的可选择菜单D 弹出 Debug 的可选择菜单R 运行D 调试R, ?D 从编辑器运行上下文环境配置Debugging(调试)
F8 进入下一步,如果当前行断点是一个方法,则不进入当前方法体内
F7 进入下一步,如果当前行断点是一个方法,则进入当前方法体内,如果该方法体还有方法,则不会进入该内嵌的方法中
F7 智能步入,断点所在行上有多个方法调用,会弹出进入哪个方法F8 跳出F9 运行到光标处,如果光标前有其他断点会进入到该断点F8 计算表达式(可以更改变量值使其生效)R 恢复程序运行,如果该断点下面代码还有断点则停在下一个断点上F8 切换断点(若光标当前行有断点则取消断点,没有则加上断点)F8 查看断点信息Navigation(导航)
O 查找类文件O 查找所有类型文件、打开文件、打开目录,打开目录需要在输入的内容前面或后面加一个反斜杠/O 前往指定的变量 / 方法← / ?→ 左右切换打开的编辑tab页F 返回到前一个工具窗口
从工具窗口进入代码文件窗口隐藏当前或最后一个活动的窗口,且光标进入代码文件窗口F4 关闭活动run/messages/find/… tabL 在当前文件跳转到某一行的指定处E 显示最近打开的文件记录列表← / ?→ 退回 / 前进到上一个操作的地方跳转到最后一个编辑的地方F1 显示当前文件选择目标弹出层,弹出层中有很多目标可以进行选择(如在代码编辑窗口可以选择显示该文件的Finder)B / ? 鼠标点击 进入光标所在的方法/变量的接口或是定义处B 跳转到实现处,在某个调用的方法名上使用会跳到具体的实现处,可以跳过接口Space, ?Y 快速打开光标所在方法、类的定义B 跳转到类型声明处U 前往当前光标所在方法的父类的方法 / 接口定义↓ / ?↑ 当前光标跳转到当前文件的前一个/后一个方法名位置] / ?[ 移动光标到当前所在代码的花括号开始/结束位置F 弹出当前文件结构层,可以在弹出的层上直接输入进行筛选(可用于搜索类中的方法)H 显示当前类的层次结构H 显示方法层次结构H 显示调用层次结构F2 / ?F2 跳转到下一个/上一个突出错误或警告的位置
F4 / ?↓ 编辑/查看代码源
Home 显示到当前文件的导航条F3选中文件/文件夹/代码行,添加/取消书签
F3 选中文件/文件夹/代码行,使用助记符添加/取消书签0.9 定位到对应数值的书签位置F3 显示所有书签Refactoring(重构)
F5 复制文件到指定目录
F6 移动文件到指定目录
在文件上为安全删除文件,弹出确认框F6 重命名文件F6 更改签名N 一致性M 将选中的代码提取为方法V 提取变量F 提取字段C 提取常量P 提取参数VCS/Local History(版本控制/本地历史记录)
K 提交代码到版本控制器T 从版本控制器更新代码C 查看最近的变更记录C 快速弹出版本控制器操作面板Live Templates(动态代码模板)
J 弹出模板选择窗口,将选定的代码使用动态模板包住J 插入自定义动态代码模板General(通用)
1.9 打开相应编号的工具窗口S 保存所有Y 同步、刷新F 切换全屏模式F 切换最大化编辑器F 添加到收藏夹I 检查当前文件与当前的配置文件`§ “ 快速切换当前的scheme(切换主题、代码样式等)
打开IDEA系统设置打开项目结构对话框A 查找动作(可设置相关选项)编辑窗口标签和工具窗口之间切换(如果在切换的过程加按上delete,则是关闭对应选中的窗口)Other(一些官方文档上没有体现的快捷键)
8 竖编辑模式导航
O 查找类文件 Ctrl + NO 前往指定的变量 / 方法 Ctrl + Shift + Alt + N← / ?→ 左右切换打开的编辑tab页Alt←/Alt→从工具窗口进入代码文件窗口 ESCL 在当前文件跳转到某一行的指定处 Ctrl + GE 显示最近打开的文件记录列表 Ctrl + E←/ ?→退回 / 前进到上一个操作的地方 Ctrl + Alt + ←/Ctrl + Alt + →跳转到最后一个编辑的地方 ?H 显示当前类的层次结构Ctrl + HH 显示方法层次结构H 显示调用层次结构 F4 /↓ 编辑/查看代码源U 显示类UML图J 查看注释编辑
删除到单词的末尾(?键为Fn+Delete)删除到单词的开头+ /?- 展开 / 折叠代码块F1 在错误或警告处显示具体描述信息L 格式化代码O 优化import开始新的一行自动结束代码,行末自动添加分号I 实现方法(实现接口中的方法)F6 重命名文件或者变量N,N 生成代码(getter、setter、构造函数、hashCode/equals,toString)P 显示方法的参数信息查找
Double? 查找任何东西
F 全局查找(根据路径)F 文件内查找G 查找模式下,向下查找G 查找模式下,向上查找导航
B 跳转到接口的实现 ?U 查看接口定义← /?→ 退回 / 前进到上一个操作的地方B /? 鼠标点击 进入光标所在的方法/变量的接口或是定义处B 跳转到类型声明处Space,Y 快速打开光标所在方法、类的定义O 查找类文件O 查找所有类型文件、打开文件、打开目录,打开目录需要在输入的内容前面或后面加一个反斜杠/F 返回到前一个工具窗口 ? 从工具窗口进入代码文件窗口
隐藏当前或最后一个活动的窗口,且光标进入代码文件窗口F3选中文件/文件夹/代码行,添加/取消书签
F3 选中文件/文件夹/代码行,使用助记符添加/取消书签0…?9 定位到对应数值的书签位置F3 显示所有书签F1 显示当前文件选择目标弹出层,弹出层中有很多目标可以进行选择(如在代码编辑窗口可以选择显示该文件的Finder)F 弹出当前文件结构层,可以在弹出的层上直接输入进行筛选(可用于搜索类中的方法)通用
F 切换全屏模式5. idea如何代码格式化
idea代码全在一行,使用快捷键Ctrl+Alt+L格式化代码,也可以将代码全部复制粘贴到特定的格式化代码网站进行格式化。
6. idea 格式化代码 配置
idea eslint可通过点击设置中我的进行自动格式化
7. 代码格式化 idea
idea软件是一款专业级的数据恢复软件,idea这款软件算法精湛,功能强大,支持多种情况下的文件丢失,分区丢失恢复,支持文件预览,支持扇区编辑,raid恢复等等高级数据恢复功能,软件功能全面,安全可靠,分区管理创建分区,删除分区,格式化分区等等。
8. idea设置代码自动格式化
IDEA的快捷键 Ctrl + Alt + L,就可以格式化SQL
请问哪位有模拟退火遗传算法的源程序?
遗传算法求解f(x)=xcosx+2的最大值
其中在尺度变换部分应用到了类似模拟退火算法部分,所有变量均使用汉语拼音很好懂
//中国电子科技集团公司
//第一研究室
//呼文韬
//hu_hu@.com
//随机初始种群
//编码方式为格雷码
//选择方法为随机遍历
//采用了精英保存策略
//采用了自适应的交叉率和变异率
//采用了与模拟退火算法相结合的尺度变换
//采用了均匀交叉法
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <iostream.h>
#include <iomanip.h>
#include <time.h>
#include <windows.h>
#define IM1
#define IM2
#define AM (1.0/IM1)
#define IMM1 (IM1-1)
#define IA1
#define IA2
#define IQ1
#define IQ2
#define IR1
#define IR2
#define NTAB
#define NDIV (1+IMM1/NTAB)
#define EPS 1.2e-7
#define RNMX (1.0-EPS)
#define zhizhenjuli 0.
#define PI 3.
#define T0 //温度要取得很高才行。
#define zhongqunshu1
#define zuobianjie -
#define youbianjie
unsigned int seed=0; //seed 为种子,要设为全局变量
void mysrand(long int i) //初始化种子
{
seed = -i;
}
long a[1];
//double hundun;
//double c=4;
//设置全局变量
struct individual
{
unsigned *chrom; //染色体;
double geti;//变量值
double shiyingdu; //目标函数的值;
double fitness; //变换后的适应度值;
};
individual *zuiyougeti;//精英保存策略
int zhongqunshu; //种群大小
individual *nowpop;//当前代
individual *newpop;//新一代
double sumfitness;//当代的总适应度fitness
double sumshiyingdu;//当代的总适应度shiyingdu
double maxfitness;//最大适应度
double avefitness;//平均适应度
double maxshiyingdu;//最大适应度
double avgshiyingdu;//平均适应度
float pc;//交叉概率
float pm;//变异概率
int lchrom;//染色体长度
int maxgen;//最大遗传代数
int gen;//遗传代数
//函数
int flipc(double ,double );//判断是否交叉
int flipm(double );//判断是否变异
int rnd(int low,int high);//产生low与high之间的任意数
void initialize();//遗传算法初始化
void preselectfitness(); //计算sumfiness,avefitness,maxfitness
void generation();
double suijibianli();//产生随机遍历指针
int fuzhi(float );//选择要复制的个体
void crossover(individual ,individual ,individual &,individual &);//交叉
void bianyi(individual &);//变异
void mubiaohanshu(individual &);//计算适应度
void chidubianhuan(individual &);//对shiyingdu进行尺度变换赋给fitness
double ran1(long *);//随机数初始
void bianma(double bianliang,unsigned *p);//编码
double yima(unsigned *p);
void guanjiancanshujisuan();//计算shiyingdu,根据shiyingdu计算sumshiyingdu,对shiyingdu进行尺度变换变成fitness,根据fitness计算sumfitness,avefitness,maxfitness
void jingyingbaoliu();
void glp(int n,int s,int *,int (*)[1],float (*)[1]);//glp生成函数
BOOL Exist(int Val, int Num, int *Array);//判断一个数在前面是否出现过
int cmpfitness(const void *p1,const void *p2)
{
float i=((individual *)p1)->shiyingdu;//现在是按照"适应度"排序,改成"个体"的话就是按照"个体"排序
float j=((individual *)p2)->shiyingdu;
return i<j ? -1:(i==j ? 0:1);//现在是按升序牌排列,将1和-1互换后就是按降序排列
}
void main()
{
initialize();
cout<<zuiyougeti->geti<<" "<<zuiyougeti->shiyingdu<<endl;/////////////
for(gen=1;gen<maxgen;gen++)
{ generation();
}
jingyingbaoliu();
cout<<setiosflags(ios::fixed)<<setprecision(6)<<zuiyougeti->geti<<" "<<setiosflags(ios::fixed)<<setprecision(6)<<(zuiyougeti->shiyingdu)<<endl;////////////////
delete [] newpop;
delete [] nowpop;
delete [] zuiyougeti;
system("pause");
}
void initialize()
{
int q[zhongqunshu1][1],s=1;
float xx[zhongqunshu1][1];//生成的glp用x储存
int h[1]={ 1};//生成向量
zuiyougeti=new individual;//最优个体的生成
zhongqunshu=;//种群数量
nowpop=new individual[zhongqunshu1];//当代
newpop=new individual[zhongqunshu1];//新一代
maxgen=;//最大代数
gen=0;//起始代
lchrom=;//基因数量的初始化
mysrand(time(0));//随机数种子
a[0]=seed;//随机数种子
//对最优个体的初始化
zuiyougeti->geti=0;
zuiyougeti->fitness=0;
zuiyougeti->shiyingdu=0;
//
glp(zhongqunshu,s,h,q,xx);
//for(int i=0;i<zhongqunshu1;i++)//产生初始种群
//{
// for(int j=0;j<s;j++)
// {
// nowpop[i].geti=zuobianjie+(youbianjie-zuobianjie)*xx[i][j];
// }
//}
for(int i=0;i<zhongqunshu1;i++)//产生初始种群
{
nowpop[i].geti=zuobianjie+(youbianjie-(zuobianjie))*ran1(a);
}
//nowpop[0].geti=;//////////////////////////
guanjiancanshujisuan();
jingyingbaoliu(); //精英保留的实现
guanjiancanshujisuan();//计算shiyingdu,根据shiyingdu计算sumshiyingdu,对shiyingdu进行尺度变换变成fitness,根据fitness计算sumfitness,avefitness,maxfitness
}
void jingyingbaoliu() //精英保留的实现
{
individual *zuiyougetiguodu;
zuiyougetiguodu=new individual[zhongqunshu1];//建立一个过渡数组
for(int i=0;i<zhongqunshu;i++)//将当代个体复制到过渡数组中
zuiyougetiguodu[i]=nowpop[i];
qsort(zuiyougetiguodu,zhongqunshu1,sizeof(individual),&cmpfitness);//按fitness升序排序
// cout<<"zuiyougetiguodu适应度:"<<zuiyougetiguodu[zhongqunshu1-1].shiyingdu<<endl;///////////
// cout<<"zuiyougeti适应度:"<<zuiyougeti->shiyingdu<<endl;///////////////////
//system("pause");
if(zuiyougetiguodu[zhongqunshu-1].shiyingdu>zuiyougeti->shiyingdu)
{
*zuiyougeti=zuiyougetiguodu[zhongqunshu1-1];//如果最优个体的fitness比当代最大的fitness小则用当代的代替之
//cout<<"zuiyougetiguodu个体:"<<zuiyougetiguodu[zhongqunshu1-1].geti<<endl;/////////////
//cout<<"zuiyougeti个体:"<<zuiyougeti->geti<<endl;/////////////
}
else
nowpop[rnd(0,(zhongqunshu1-1))]=*zuiyougeti;//否则的话从当代中随机挑选一个用最优个体代替之
delete [] zuiyougetiguodu;//释放过渡数组
}
void guanjiancanshujisuan()//计算shiyingdu,根据shiyingdu计算sumshiyingdu,对shiyingdu进行尺度变换变成fitness,根据fitness计算sumfitness,avefitness,maxfitness
{
for(int i=0;i<zhongqunshu;i++)//计算shiyingdu
mubiaohanshu(nowpop[i]);
for(i=0;i<zhongqunshu;i++)//对shiyingdu进行尺度变换变成fitness
chidubianhuan(nowpop[i]);
preselectfitness();//根据fitness计算sumfitness,avefitness,maxfitness
}
void mubiaohanshu(individual &bianliang)//计算shiyingdu
{
bianliang.shiyingdu=(bianliang.geti*cos(bianliang.geti)+2.0);//目标函数
}
void chidubianhuan(individual &bianliang)//对shiyingdu进行尺度变换变成fitness
{
double T;//退火温度
T=T0*(pow(0.,(gen+1-1)));
double sum=0;
for(int j=0;j<zhongqunshu;j++)
sum+=exp(nowpop[j].shiyingdu/T);
bianliang.fitness=exp(bianliang.shiyingdu/T)/sum;//算出fitness
}
void preselectfitness()//根据fitness计算sumfitness,avefitness,maxfitness
{
int j;
sumfitness=0;
for(j=0;j<zhongqunshu;j++)
sumfitness+=nowpop[j].fitness;
individual *guodu;
guodu=new individual[zhongqunshu1];
for(j=0;j<zhongqunshu;j++)
guodu[j]=nowpop[j];
qsort(guodu,zhongqunshu1,sizeof(individual),&cmpfitness);
maxfitness=guodu[zhongqunshu1-1].fitness;
avefitness=sumfitness/zhongqunshu1;
delete [] guodu;
}
void generation()
{
individual fuqin1,fuqin2,*pipeiguodu,*pipeichi;
int *peiduishuzu;//用来存放产生的随机配对
pipeiguodu=new individual[zhongqunshu1];
pipeichi=new individual[zhongqunshu1];
peiduishuzu=new int[zhongqunshu1];
int member1,member2,j=0,fuzhijishu=0,i=0,temp=0,tt=0;
float zhizhen;
//随机遍历的实现
for(zhizhen=suijibianli();zhizhen<1;(zhizhen=zhizhen+zhizhenjuli))//设定指针1/
{
pipeichi[fuzhijishu]=nowpop[fuzhi(zhizhen)];
fuzhijishu++;
}
//交叉与变异的实现
//交叉
for(i=0;i<zhongqunshu1;i++)
{
peiduishuzu[i]=-1;
}
for (i=0; i<zhongqunshu1; i++)
{
temp =rnd(0,zhongqunshu1-1); //产生值在0-zhongqunshu1-1的随机数
while(Exist(temp, i, peiduishuzu))//判断产生的随机数是否已经产生过,如果是,则再产生一个随机数
{
temp =rnd(0,zhongqunshu1-1);
}
//如果没有的话,则把产生的随机数放在peiduishuzu中
*(peiduishuzu+i) = temp;
}
for(i=0;i<zhongqunshu1-1;i=i+2)
{
fuqin1=pipeichi[peiduishuzu[i]];
fuqin2=pipeichi[peiduishuzu[i+1]];
crossover(fuqin1,fuqin2,newpop[i],newpop[i+1]);
}
for(j=0;j<zhongqunshu1;j++)
{
//if(newpop[j].geti<-)
//cout<<"个体数值小于下界了";
nowpop[j].geti=newpop[j].geti;
}
//
guanjiancanshujisuan();
//变异的实现
for(j=0;j<zhongqunshu;j++)
{
bianyi(nowpop[j]);
}
//
guanjiancanshujisuan();
//精英保留的实现
jingyingbaoliu();
//
guanjiancanshujisuan();
delete [] peiduishuzu;
delete [] pipeichi;
delete [] pipeiguodu;
}
void crossover(individual parent1,individual parent2,individual &child1,individual &child2)//交叉
{
int j;
unsigned *panduan;
panduan=new unsigned[lchrom];
parent1.chrom=new unsigned[lchrom];
parent2.chrom=new unsigned[lchrom];
child1.chrom=new unsigned[lchrom];
child2.chrom=new unsigned[lchrom];
//cout<<"jiaocha"<<endl;///////////////////////
bianma(parent1.geti,parent1.chrom);
bianma(parent2.geti,parent2.chrom);
if(flipc(parent1.fitness,parent2.fitness))
{
for(j=0;j<lchrom;j++)
panduan[j]=rnd(0,1);
//for(j=0;j<lchrom;j++)////////////////
// {
// cout<<panduan[j];/////////////
// }
// cout<<endl;////////////////
// system("pause");////////////////
for(j=0;j<lchrom;j++)
{
if(panduan[j]==1)
child1.chrom[j]=parent1.chrom[j];
else
child1.chrom[j]=parent2.chrom[j];
}
for(j=0;j<lchrom;j++)
{
if(panduan[j]==0)
child2.chrom[j]=parent1.chrom[j];
else
child2.chrom[j]=parent2.chrom[j];
}
//for(j=0;j<lchrom;j++)////////////////
//{
// cout<<child1.chrom[j];/////////////
// }
//cout<<endl;////////////////
// system("pause");////////////////
child1.geti=yima(child1.chrom);
child2.geti=yima(child2.chrom);
delete [] child2.chrom;
delete [] child1.chrom;
delete [] parent2.chrom;
delete [] parent1.chrom;
delete [] panduan;
}
else
{
for(j=0;j<lchrom;j++)
{
child1.chrom[j]=parent1.chrom[j];
child2.chrom[j]=parent2.chrom[j];
}
child1.geti=yima(child1.chrom);
child2.geti=yima(child2.chrom);
delete [] child2.chrom;
delete [] child1.chrom;
delete [] parent2.chrom;
delete [] parent1.chrom;
delete [] panduan;
}
}
void bianyi(individual &child)//变异
{
child.chrom=new unsigned[lchrom];
//cout<<"变异"<<endl;
bianma(child.geti,child.chrom);
for(int i=0;i<lchrom;i++)
if(flipm(child.fitness))
{
if(child.chrom[i]=0)
child.chrom[i]=1;
else
child.chrom[i]=0;
}
child.geti=yima(child.chrom);
delete [] child.chrom;
}
void bianma(double bianliang,unsigned *p)//编码
{
unsigned *q;
unsigned *gray;
q=new unsigned[lchrom];
gray=new unsigned[lchrom];
int x=0;
int i=0,j=0;
if(bianliang<zuobianjie)///////////////////
{
cout<<"bianliang:"<<bianliang<<endl;/////////
system("pause");
}
//cout<<youbianjie-(zuobianjie)<<endl;
//system("pause");
x=(bianliang-(zuobianjie))*((pow(2,lchrom)-1)/(youbianjie-(zuobianjie)));
//cout<<x<<endl;///////////
if(x<0)
system("pause");///////////
for(i=0;i<lchrom;i++)
{
q[i]=0;
p[i]=0;
}
i=0;
while (x!=0&&(i!=lchrom))
{
q[i]=(unsigned)(x%2);
x=x/2;
i++;
}
// for(i=0;i<lchrom;i++)//////////////////
// cout<<q[i];///////////////
// cout<<endl;///////////
int w=lchrom-1;
if(q[w]!=0&&q[w]!=1)
system("pause");
for(j=0;j<lchrom&&w>0;j++)
{
p[j]=q[w];
w--;
}
//cout<<"yuanma"<<endl;
//for(j=0;j<lchrom;j++)///////////
// cout<<p[j];////////
//cout<<endl;////////////////////
gray[0]=p[0];
for(j=1;j<lchrom;j++)
{
if(p[j-1]==p[j])
gray[j]=0;
else if(p[j-1]!=p[j])
gray[j]=1;
}
for(j=0;j<lchrom;j++)
p[j]=gray[j];
//cout<<"geleima"<<endl;
//for(j=0;j<lchrom;j++)///////////
// cout<<p[j];////////
//cout<<endl;////////////////////
//system("pause");///////////
delete [] gray;
delete [] q;
}
double yima(unsigned *p) //译码
{
int i=0;
// for(i=0;i<lchrom;i++)/////////
// {
// cout<<p[i];//////
// }
// cout<<endl;/////////
// system("pause");//////////
int x=0;
unsigned *q;
q=new unsigned[lchrom];
q[0]=p[0];
// cout<<q[0]<<endl;//////////////////
// system("pause");//////////
for(int j=1;j<lchrom;j++)
{
if(q[j-1]==p[j])
q[j]=0;
else if(q[j-1]!=p[j])
q[j]=1;
}
// for(i=0;i<lchrom;i++)//////
// {
// cout<<q[i];//////////
// if(q[i]!=0&&q[i]!=1)
// {
// cout<<q[i];
// system("pause");
// }
// }
// cout<<endl;////////
// system("pause");///////////////////
for(i=0;i<lchrom;i++)
x=x+q[i]*pow(2,(lchrom-i-1));
if(x<0)
{
cout<<"译码出错1"<<endl;
system("pause");
}
//cout<<"x:"<<x<<endl;
double bianliang;
//cout<<pow(2,)<<endl;
//cout<<*x<<endl;
//cout<<(x*(/(pow(2,)-1)))<<endl;
bianliang=(x*((youbianjie-(zuobianjie))/(pow(2,lchrom)-1)))+zuobianjie;
if(bianliang<zuobianjie)
{
cout<<"译码出错2"<<endl;
system("pause");
}
delete [] q;
return bianliang;
}
double ran1(long *idum)
{
int j;
long k;
static long idum2=;
static long iy=0;
static long iv[NTAB];
float temp;
if (*idum <= 0)
{
if (-(*idum) < 1) *idum=1;
else *idum = -(*idum);
idum2=(*idum);
for (j=NTAB+7;j>=0;j--)
{
k=(*idum)/IQ1;
*idum=IA1*(*idum-k*IQ1)-k*IR1;
if (*idum < 0) *idum += IM1;
if (j < NTAB) iv[j] = *idum;
}
iy=iv[0];
}
k=(*idum)/IQ1;
*idum=IA1*(*idum-k*IQ1)-k*IR1;
if (*idum < 0) *idum += IM1;
k=idum2/IQ2;
idum2=IA2*(idum2-k*IQ2)-k*IR2;
if (idum2 < 0) idum2 += IM2;
j=iy/NDIV;
iy=iv[j]-idum2;
iv[j] = *idum;
if (iy < 1) iy += IMM1;
if ((temp=AM*iy) > RNMX) return RNMX;
else return temp;
}
double suijibianli()//随机遍历
{
double i=ran1(a);
while(i>zhizhenjuli)
{
i=ran1(a);
}
//cout<<i<<endl;//////////////
return i;
}
int fuzhi(float p)//复制
{
int i;
double sum=0;
if(sumfitness!=0)
{
for(i=0;(sum<p)&&(i<zhongqunshu);i++)
sum+=nowpop[i].fitness/sumfitness;
}
else
i=rnd(1,zhongqunshu1);
return(i-1);
}
int rnd(int low, int high) /*在整数low和high之间产生一个随机整数*/
{
int i;
if(low >= high)
i = low;
else
{
i =(int)((ran1(a) * (high - low + 1)) + low);
if(i > high) i = high;
}
return(i);
}
int flipc(double p,double q)//判断是否交叉
{
double pc1=0.9,pc2=0.6;
if((p-q)>0)
{
if(p>=avefitness)
{
pc=pc1-(pc1-pc2)*(p-avefitness)/(maxfitness-avefitness);
}
else
pc=pc1;
}
else
{
if(q>=avefitness)
{
pc=pc1-(pc1-pc2)*(q-avefitness)/(maxfitness-avefitness);
}
else
pc=pc1;
}
if(ran1(a)<=pc)
return(1);
else
return(0);
}
int flipm(double p)//判断是否变异
{
double pm1=0.,pm2=0.;
if(p>=avefitness)
{
pm=(pm1-(pm1-pm2)*(maxfitness-p)/(maxfitness-avefitness));
}
else
pm=pm1;
if(ran1(a)<=pm)
return(1);
else
return(0);
}
void glp(int n,int s,int *h,int (*q)[1],float (*xx)[1])//glp
{
int i=0,j=0;
//求解q
for(i=0;i<n;i++)
{
for(j=0;j<s;j++)
{
*(*(q+i)+j)=((i+1)*(*(h+j)))%n;
}
}
i=n-1;
for(j=0;j<s;j++)
{
*(*(q+i)+j)=n;
}
//求解x
for(i=0;i<n;i++)
{
for(j=0;j<s;j++)
{
*(*(xx+i)+j)=(float)(2*(*(*(q+i)+j))-1)/(2*n);
}
}
}
BOOL Exist(int Val, int Num, int *Array)//判断一个数是否在一个数组的前Num个数中
{
BOOL FLAG = FALSE;
int i;
for (i=0; i<Num; i++)
if (Val == *(Array + i))
{
FLAG = TRUE;
break;
}
return FLAG;
}