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遍历指定文件及文件夹的方法
May 09 Python
Flask框架Flask-Login用法分析
Jul 23 Python
python事件驱动event实现详解
Nov 21 Python
python url 参数修改方法
Dec 26 Python
Python 从一个文件中调用另一个文件的类方法
Jan 10 Python
Python之时间和日期使用小结
Feb 14 Python
Python3.4学习笔记之类型判断,异常处理,终止程序操作小结
Mar 01 Python
python调用自定义函数的实例操作
Jun 26 Python
python 类的继承 实例方法.静态方法.类方法的代码解析
Aug 23 Python
python连接PostgreSQL数据库的过程详解
Sep 18 Python
解决Python3.8运行tornado项目报NotImplementedError错误
Sep 02 Python
python中子类与父类的关系基础知识点
Feb 02 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
5.PHP的其他功能
2006/10/09 PHP
php curl_init函数用法
2014/01/31 PHP
Laravel框架实现定时发布任务的方法
2018/08/16 PHP
PHP文件后缀不强制为.php方法
2019/03/31 PHP
javascript Demo模态窗口
2009/12/06 Javascript
基于Jquery的简单&简陋Tabs插件代码
2010/02/09 Javascript
jQuery中与toggleClass等价的程序段 以及未来学习的方向
2010/03/18 Javascript
调试Node.JS的辅助工具(NodeWatcher)
2012/01/04 Javascript
利用JQuery和JS实现奇偶行背景颜色自定义效果
2012/11/19 Javascript
javascript 保存文件到本地实现方法
2012/11/29 Javascript
js中 关于undefined和null的区别介绍
2013/04/16 Javascript
JavaScript 对任意元素,自定义右键菜单的实现方法
2013/05/08 Javascript
JavaScript中的6种运算符总结
2014/10/16 Javascript
JavaScript实现基于十进制的四舍五入实例
2015/07/17 Javascript
JQuery中ajax方法访问web服务实例
2015/07/18 Javascript
ES6记录异步函数的执行时间详解
2016/08/31 Javascript
如何制作幻灯片(代码分享)
2017/01/06 Javascript
微信小程序 点击控件后选中其它反选实例详解
2017/02/21 Javascript
微信小程序选择图片和放大预览图片功能
2017/11/02 Javascript
Bootstrap treeview实现动态加载数据并添加快捷搜索功能
2018/01/07 Javascript
微信小程序—setTimeOut定时器的问题及解决
2019/07/26 Javascript
Javascript柯里化实现原理及作用解析
2020/10/22 Javascript
python简单实现基于SSL的IRC bot实例
2015/06/15 Python
python中执行shell的两种方法总结
2017/01/10 Python
python解决汉字编码问题:Unicode Decode Error
2017/01/19 Python
Python命令行参数解析工具 docopt 安装和应用过程详解
2019/09/26 Python
python时间序列数据转为timestamp格式的方法
2020/08/03 Python
html5的画布canvas——画出简单的矩形、三角形实例代码
2013/06/09 HTML / CSS
浅析HTML5中header标签的用法
2016/06/24 HTML / CSS
美国一家主打母婴用品的团购网站:zulily
2017/09/19 全球购物
中医专业职业生涯规划书范文
2014/01/04 职场文书
工作推荐信范文
2014/05/10 职场文书
紧急迫降观后感
2015/06/15 职场文书
Python pygame实现中国象棋单机版源码
2021/06/20 Python
python自动化八大定位元素讲解
2021/07/09 Python
Java 多态分析
2022/04/26 Java/Android