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基类函数的重载与调用实例分析
Jan 12 Python
Python PyQt5标准对话框用法示例
Aug 23 Python
Python探索之URL Dispatcher实例详解
Oct 28 Python
python实现五子棋人机对战游戏
Mar 25 Python
django 消息框架 message使用详解
Jul 22 Python
python tkinter控件布局项目实例
Nov 04 Python
Python实现图片批量加入水印代码实例
Nov 30 Python
python 字典访问的三种方法小结
Dec 05 Python
Python PyInstaller安装和使用教程详解
Jan 08 Python
Django ORM判断查询结果是否为空,判断django中的orm为空实例
Jul 09 Python
Python通过len函数返回对象长度
Oct 22 Python
Python自动化爬取天眼查数据的实现
Jun 15 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输入流php://input介绍
2012/09/18 PHP
php更新mysql后获取改变行数的方法
2014/12/25 PHP
javascript Keycode对照表
2009/10/24 Javascript
javascript整除实现代码
2010/11/23 Javascript
JS复制内容到剪切板的实例代码(兼容IE与火狐)
2013/11/19 Javascript
判断JS对象是否拥有某种属性的两种方式
2013/12/02 Javascript
javascript 模拟坦克大战游戏(html5版)附源码下载
2014/04/08 Javascript
connect中间件session、cookie的使用方法分享
2014/06/17 Javascript
javascript中sort()的用法实例分析
2015/01/30 Javascript
针对BootStrap中tabs控件的美化和完善(推荐)
2016/07/06 Javascript
JS实现图片局部放大或缩小的方法
2016/08/20 Javascript
AngularJs Managing Service Dependencies详解
2016/09/02 Javascript
JS判断浏览器是否安装flash插件的简单方法
2016/09/13 Javascript
javascript设计模式之单体模式学习笔记
2017/02/15 Javascript
JavaScript实现body内任意节点的自定义属性功能示例
2017/09/18 Javascript
javascript实现简易聊天室
2019/07/12 Javascript
React学习之JSX与react事件实例分析
2020/01/06 Javascript
js实现二级联动简单实例
2020/01/11 Javascript
基于Django contrib Comments 评论模块(详解)
2017/12/08 Python
Python类的继承用法示例
2019/01/31 Python
Python3使用TCP编写一个简易的文件下载器功能
2019/05/08 Python
PYTHON实现SIGN签名的过程解析
2019/10/28 Python
Python Numpy 控制台完全输出ndarray的实现
2020/02/19 Python
CSS3实现超慢速移动动画效果非常流畅无卡顿
2014/06/15 HTML / CSS
利用canvas实现图片下载功能来实现浏览器兼容问题
2019/05/31 HTML / CSS
canvas绘制文本内容自动换行的实现代码
2019/01/14 HTML / CSS
介绍一下Ruby的多线程处理
2013/02/01 面试题
涉外文秘个人求职的自我评价
2013/10/07 职场文书
总经理秘书工作职责
2013/12/26 职场文书
教师四风对照检查材料思想汇报
2014/09/17 职场文书
教师考核表个人总结
2015/02/12 职场文书
七一慰问简报
2015/07/20 职场文书
安全生产培训心得体会
2016/01/18 职场文书
《平行四边形的面积》教学反思
2016/02/16 职场文书
Nginx实现负载均衡的项目实践
2022/03/18 Servers
vue项目proxyTable配置和部署服务器
2022/04/14 Vue.js