




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/#pragma warning (disable: 4786)/#pragma comment (linker, /STACK:16777216)/HEAD#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;typedef long long LL;const double MAX_VAL = (double)1e18;const int MAX_GEN = 30;/最大迭代次数const int MAX_SCALE = 3000;/最大种群规模const int MAX_CITY = 20 + 2;/最大城市数const double W_VAL = 0.729;/struct SO int x, y; SO() SO(int x, int y): x(x), y(y);struct Point double x, y; Point() Point(int x, int y):x(x), y(y); void read() scanf(%lf%lf, &x, &y); ;inline int randomI(int x) return rand()%x; inline double randomD() return (double)rand()/RAND_MAX; inline double getDist(Point a, Point b) return sqrt(a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y);struct PSO double w; int scale; int cityNum; int nowGen;/当前代数 int maxGen;/迭代次数 int bestNum; int bestGen;/最佳出现代数 double distMAX_CITYMAX_CITY; int oPopMAX_SCALEMAX_CITY;/粒子群 double fitnessMAX_SCALE;/种群适应度,表示种群中各个个体的适应度 vector listVMAX_SCALE;/ 每科粒子的初始交换序列 int PdMAX_SCALEMAX_CITY;/一颗粒子历代中出现最好的解, double vPdMAX_SCALE;/解的评价值 int PgdMAX_CITY;/ 整个粒子群经历过的的最好的解,每个粒子都能记住自己搜索到的最好解 double vPgd;/ 最好的解的评价值 PSO() PSO(int s, int c, int mG, double ww, double dMAX_CITYMAX_CITY) scale = s; cityNum = c; maxGen = mG; w = ww; for (int i = 0; i cityNum; i+) for (int j = 0; j cityNum; j+) distij = dij; void copyArray(double a, double b, int n) for (int i = 0; i n; i+) ai = bi; void copyArray(int a, int b, int n) for (int i = 0; i n; i+) ai = bi; void init() nowGen = 0; for (int i = 0; i scale; i+) for (int j = 0; j cityNum; ) int x = randomI(cityNum); int r; for (r = 0; r j; r+) if (x = oPopir) break; if (r = j) oPopij = x;/ cout oPopij ; j+; / cout endl; for (int i = 0; i scale; i+) / cout i : endl; int vn = randomI(cityNum) + 1; for (int j = 0; j vn; j+) int x = randomI(cityNum); int y = randomI(cityNum); while (x = y) y = randomI(cityNum); SO so(x, y); listVi.push_back(so);/ cout so.x * so.y ; / cout endl; getFitness(); for (int i = 0; i scale; i+) vPdi = fitnessi; copyArray(Pdi, oPopi, cityNum); bestNum = 0; vPgd = fitness0; bestGen = 0; for (int i = 0; i fitnessi) vPgd = fitnessi; bestNum = i; copyArray(Pgd, oPopbestNum, cityNum); double getVal(int x) double ret = 0; for (int i = 0; i cityNum; i+) int xx = oPopxi % cityNum; int yy = oPopx(i + 1) % cityNum; ret += distxxyy; return ret; void getFitness() for (int i = 0; i scale; i+) fitnessi = getVal(i); void UpdateVal() int j = 0; double vj = fitness0; for (int i = 0; i fitnessi) vPdi = fitnessi; copyArray(Pdi, oPopi, cityNum);/? if (vj fitnessi) vj = fitnessi; j = i; if (vj vPgd) bestGen = nowGen;/ bestNum = j;/ vPgd = vj; copyArray(Pgd, oPopj, cityNum); void changeTo(int a, vector v)/ int vn = v.size(); for (int i = 0; i vn; i+) int x = vi.x, y = vi.y; swap(ax, ay); vector minus(int a, int b)/ int cMAX_CITY, dMAX_CITY; for (int i = 0; i cityNum; i+) di = bi; for (int i = 0; i cityNum; i+) cai = i; vector v; SO s; for (int i = 0; i cityNum; i+) if (di != ai) s.x = i, s.y = cai; swap(ds.x, ds.y); v.push_back(s); return v;void addTo(vector &v, vector a, int vn) for (int i = 0; i vn; i+) v.push_back(ai); / Vii=wVi+ra(Pid-Xid)+rb(Pgd-Xid) void evolution() for (int ig = 0; ig maxGen; ig+) nowGen = ig + 1;/nowGen for (int is = 0; is scale; is+) if (is = bestNum) continue; vector v; v.clear(); int lvn = w * listVis.size(); addTo(v, listVis, lvn); vector a = minus(Pdis, oPopis); int an = randomD() * a.size(); addTo(v, a, an); vector b = minus(Pgd, oPopis); int bn = randomD() * b.size(); addTo(v, b, bn); listVis = v; changeTo(oPopis, listVis);/ cout listVis.size() endl; getFitness(); UpdateVal(); void solve() init(); evolution(); printf(answer %lf:n, vPgd); printf(solution n); for (int i = 0; i cityNum; i+) if (i) printf( ); printf(%dn, Pgdi); cout bestGen bestNum endl; puts(); ;int cn;vector pv;double dMAX_CITYMAX_CITY;void pre(vector pv) int cn = pv.size(); for (int i = 0; i cn; i+) for (int j = i + 1; j cn) pv.clear(); for (int i = 0; i cn; i+) Point p; p.read(); pv.push_back(p); pre(pv); PSO solver(MAX_SCALE, cn, MAX_GEN, W_VAL, d); cout * endl; solver.solve(); cout * endl; return 0;/ cout nowGen -: endl;/ for (int i = 0; i scale; i+)/ / cout vPdi fitnessi endl;/ for (int j = 0; j cityNum; j+)/ cout Pdij ;/ cout endl;/ / for (int i = 0; i scale; i+)/ / for (int j = 0; j listVi.size
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机关公文写作与处理7
- 2024融合大语言模型DeepSeek技术新人音版音乐一年级下册(赵季平主编)《第一单元 春天》( 唱歌 布谷 小雨沙沙 演奏 沙锤 三角铁)(计划一课时)教学设计2022课标
- 实 践 调研我国造船与航海方面的成就(教学设计)-2024-2025学年沪科版物理八年级下册
- 驾驶员安全文明驾驶培训会
- 督查考核年终汇报(街道委员会)
- 房产按揭借款合同标准格式
- 南京物业管理合同2025
- 协议书通信设备协议书合同样本
- 医院客户服务培训
- 高强度铸件生产合同范本
- 2024年辽宁高考地理真题试题(原卷版+含解析)
- 第16课 经济危机与资本主义国家的应对(课件)-【中职专用】《世界历史》(同课异构)(高教版2023基础模块)
- 广州市白云区金广实验学校2022-2023学年七年级下学期期中考试英语试题
- HJ 997-2018 土壤和沉积物 醛、酮类化合物的测定 高效液相色谱法(正式版)
- 俄罗斯介绍模板
- 50以内加减法练习题
- 全民国家安全教育日培训课件模板(可编辑)
- 江苏省盐城市建湖县2023-2024学年七年级下学期期中语文试题
- 印刷厂常用生产工艺、设备作业指导书一整套
- 小班语言《轻轻地》课件
- 甘肃省农垦集团有限责任公司人才招聘考试试题及答案
评论
0/150
提交评论