Python使用遗传算法解决最大流问题


Posted in Python onJanuary 29, 2018

本文为大家分享了Python遗传算法解决最大流问题,供大家参考,具体内容如下

Generate_matrix

def Generate_matrix(x,y):
 import numpy as np
 import random
 return np.ceil(np.array([random.random()*10 for i in range(x*y)]).reshape(x,y))

Max_road

def Max_road(A,degree,start):

 import random
 import numpy as np
 import copy

 def change(M,number,start): # number 控制变异程度 start 控制变异量 
  x , y = M.shape
  for i in range(start,x):
   Line = zip(range(len(M[i])),M[i])
   index_0 = [t[0] for t in Line if t[1]==0] # 获取 0 所对应的下标    
   index_1 = [t[0] for t in Line if t[1]==1] # 获取 1 所对应的下标
   M[i][random.sample(index_0,number)[0]]=1 # 随机改变序列中 number 个值 0->1
   M[i][random.sample(index_1,number)[0]]=0 # 随机改变序列中 number 个值 1->0
  return M

 x,y = A.shape

 n=x
 generation = y

 #初始化一个有 n 中情况的解决方案矩阵
 init_solve = np.zeros([n,x+y-2]) 
 init=[1]*(x-1)+[0]*(y-1)
 for i in range(n) :
  random.shuffle(init)
  init_solve[i,:] = init # 1 表示向下走 0 表示向右走 
 solve = copy.copy(init_solve)

 for loop in range(generation):
  Sum = [A[0,0]]*n # 用于记录每一种方案的总流量
  for i in range(n):
   j=0;k=0;
   for m in solve[i,:]:
    if m==1:
     k=k+1
    else:
     j=j+1   
    Sum[i] = Sum[i] + A[k,j]

  Sum_index = zip(range(len(Sum)),Sum)
  sort_sum_index = sorted(Sum_index,key = lambda d : d[1] , reverse =True) # 将 方案 按照流量总和排序

  Max = sort_sum_index[0][1] # 最大流量
  #print Max
  solve_index_half = [a[0] for a in sort_sum_index[:n/2]] # 保留排序后方案的一半
  solve = np.concatenate([solve[solve_index_half],solve[solve_index_half]]) # 将保留的一半方案 进行复制 ,复制部分用于变异
  change(solve,int((x+y-2)*degree)+1 ,start) # 变异

 return solve[0] , Max

Draw_road

def Draw_road(road,A):

 import pylab as plt
 import seaborn
 seaborn.set()

 x , y =A.shape 

 # 将下移和右移映射到绘图坐标上
 Road = [(1,x)] # 初始坐标
 j=1;k=x;
 for m in road:
  if m==1:
   k=k-1
  else:
   j=j+1
  Road.append((j,k))

 # print Road

 for i in range(len(road)):  
  plt.plot([Road[i][0],Road[i+1][0]],[Road[i][1],Road[i+1][1]])

实际运行的例子

In [119]: A = Generate_matrix(4,6)

In [120]: A
Out[120]: 
array([[ 10., 1., 7., 10., 8., 8.],
  [ 4., 8., 8., 4., 8., 2.],
  [ 9., 8., 8., 3., 9., 8.],
  [ 7., 2., 5., 9., 3., 8.]])

In [121]: road , M=Max_road(A,0.1,2)

In [122]: Draw_road(road,A)

Python使用遗传算法解决最大流问题

较大规模的情况

In [105]: A = Generate_matrix(40,60)

In [106]: road , M=Max_road(A,0.1,4)

In [107]: road
Out[107]: 
array([ 0., 0., 0., 1., 1., 0., 0., 0., 0., 0., 0., 0., 0.,
  1., 0., 0., 0., 1., 0., 0., 1., 0., 1., 1., 1., 1.,
  1., 0., 0., 0., 0., 0., 1., 0., 0., 1., 0., 0., 0.,
  1., 0., 0., 0., 1., 0., 1., 0., 0., 1., 0., 0., 1.,
  0., 0., 0., 1., 0., 0., 1., 1., 1., 1., 0., 0., 0.,
  0., 0., 0., 1., 0., 1., 1., 1., 1., 0., 1., 0., 1.,
  1., 1., 0., 1., 0., 1., 0., 1., 0., 1., 0., 0., 1.,
  0., 1., 0., 0., 1., 0., 1.])

In [108]: Draw_road(road,A)

Python使用遗传算法解决最大流问题

In [109]: A = generate_Matrix(100,200)
In [110]: road , M=Max_road(A,0.1,10)
In [111]: draw_road(road,A)

Python使用遗传算法解决最大流问题

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现对excel文件列表值进行统计的方法
Jul 25 Python
Python实现带参数与不带参数的多重继承示例
Jan 30 Python
Python3 中把txt数据文件读入到矩阵中的方法
Apr 27 Python
python实现自动网页截图并裁剪图片
Jul 30 Python
Scrapy框架爬取西刺代理网免费高匿代理的实现代码
Feb 22 Python
学习python可以干什么
Feb 26 Python
用python实现英文字母和相应序数转换的方法
Sep 18 Python
python操作gitlab API过程解析
Dec 27 Python
Python中实现输入超时及如何通过变量获取变量名
Jan 18 Python
完美解决ARIMA模型中plot_acf画不出图的问题
Jun 04 Python
七个Python必备的GUI库
Apr 27 Python
详解在OpenCV中如何使用图像像素
Mar 03 Python
Python subprocess模块详细解读
Jan 29 #Python
python微信跳一跳游戏辅助代码解析
Jan 29 #Python
Python面向对象之继承代码详解
Jan 29 #Python
Python多线程threading和multiprocessing模块实例解析
Jan 29 #Python
Python编程scoketServer实现多线程同步实例代码
Jan 29 #Python
Python模块搜索路径代码详解
Jan 29 #Python
python机器人行走步数问题的解决
Jan 29 #Python
You might like
PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
2012/04/09 PHP
PHP数据库连接mysql与mysqli对比分析
2016/01/04 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
2018/02/08 PHP
经典的解除许多网站无法复制文字的绝招
2006/12/31 Javascript
在IE上直接编辑网页内容的js代码(IE地址栏js)
2009/04/27 Javascript
使用iframe window的scroll方法控制iframe页面滚动
2014/03/05 Javascript
jQuery oLoader实现的加载图片和页面效果
2015/03/14 Javascript
javascript组合使用构造函数模式和原型模式实例
2015/06/04 Javascript
javascript针对不确定函数的执行方法
2015/12/16 Javascript
JavaScript判断图片是否已经加载完毕的方法汇总
2016/02/05 Javascript
Vuejs第八篇之Vuejs组件的定义实例解析
2016/09/05 Javascript
AngularJS基于MVC的复杂操作实例讲解
2017/12/31 Javascript
JS阻止事件冒泡的方法详解
2019/08/26 Javascript
微信小程序保持session会话的方法
2020/03/20 Javascript
html-webpack-plugin修改页面的title的方法
2020/06/18 Javascript
[02:12]DOTA2英雄基础教程 变体精灵
2013/12/16 DOTA
[02:08:58]2014 DOTA2国际邀请赛中国区预选赛 Ne VS CIS
2014/05/22 DOTA
Python快速从注释生成文档的方法
2016/12/26 Python
Python+树莓派+YOLO打造一款人工智能照相机
2018/01/02 Python
Python 面试中 8 个必考问题
2018/11/16 Python
PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例
2019/02/13 Python
Python人脸识别第三方库face_recognition接口说明文档
2019/05/03 Python
Python递归函数 二分查找算法实现解析
2019/08/12 Python
python中sort和sorted排序的实例方法
2019/08/26 Python
matplotlib quiver箭图绘制案例
2020/04/17 Python
python爬虫实例之获取动漫截图
2020/05/31 Python
关于HTML5语义标签的实践(blog页面)
2016/07/12 HTML / CSS
印尼购物网站:iLOTTE
2019/10/16 全球购物
人力资源管理专业应届生求职信
2013/09/28 职场文书
社区优秀志愿者材料
2014/02/02 职场文书
中秋节活动总结
2014/08/29 职场文书
村干部任职承诺书
2015/01/21 职场文书
2015年司机年终工作总结
2015/05/14 职场文书
2017春节晚会开幕词
2016/03/03 职场文书
JavaScript函数柯里化
2021/11/07 Javascript
阿里云ECS云服务器快照的概念以及如何使用
2022/04/21 Servers