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中的输入和输出功能进行读取和写入的教程
Apr 14 Python
举例讲解Python的Tornado框架实现数据可视化的教程
May 02 Python
Python检测QQ在线状态的方法
May 09 Python
Python比较2个时间大小的实现方法
Apr 10 Python
解决Python3中的中文字符编码的问题
Jul 18 Python
python把ipynb文件转换成pdf文件过程详解
Jul 09 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
Nov 26 Python
python实现数据清洗(缺失值与异常值处理)
Dec 02 Python
MNIST数据集转化为二维图片的实现示例
Jan 10 Python
Python中求对数方法总结
Mar 10 Python
基于python实现把json数据转换成Excel表格
May 07 Python
python3实现无权最短路径的方法
May 12 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
海贼王:最美的悬赏令!
2020/03/02 日漫
php将gd生成的图片缓存到memcache的小例子
2013/06/05 PHP
PHP jQuery表单,带验证具体实现方法
2014/02/15 PHP
ThinkPHP视图查询详解
2014/06/30 PHP
php内存缓存实现方法
2015/01/24 PHP
浅谈PHP中Stream(流)
2015/06/08 PHP
javascript利用初始化数据装配模版的实现代码
2010/11/17 Javascript
通过jQuery源码学习javascript(三)
2012/12/27 Javascript
js倒计时小程序
2013/11/05 Javascript
jquery对ajax的支持介绍
2013/12/10 Javascript
从数据库读取数据后将其输出成html标签的三种方法
2014/10/13 Javascript
JS实现控制表格行内容垂直对齐的方法
2015/03/30 Javascript
Highcharts学习之数据列
2016/08/03 Javascript
vue中实现methods一个方法调用另外一个方法
2018/02/08 Javascript
解析Json字符串的三种方法日常常用
2018/05/02 Javascript
js中的深浅拷贝问题简析
2019/05/10 Javascript
[01:29]Ti4循环赛第三日精彩回顾
2014/07/13 DOTA
MySQLdb ImportError: libmysqlclient.so.18解决方法
2014/08/21 Python
通过mod_python配置运行在Apache上的Django框架
2015/07/22 Python
在cmder下安装ipython以及环境的搭建
2018/10/19 Python
python web框架中实现原生分页
2019/09/08 Python
Python字符串中删除特定字符的方法
2020/01/15 Python
python plt可视化——打印特殊符号和制作图例代码
2020/04/17 Python
Python super()函数使用及多重继承
2020/05/06 Python
弄清Pytorch显存的分配机制
2020/12/10 Python
购买瑞典当代设计的腕表和太阳眼镜:TRIWA
2016/10/30 全球购物
夏洛特和乔治婴儿和儿童时装精品店:Charlotte and George
2018/06/06 全球购物
Under Armour安德玛法国官网:美国高端运动科技品牌
2018/06/29 全球购物
美国LOGO设计公司:The Logo Company
2018/07/16 全球购物
工作中个人的自我评价
2013/12/31 职场文书
申请任职学生会干部自荐书范文
2014/02/13 职场文书
绘画专业自荐信
2014/07/04 职场文书
国庆节活动总结
2014/08/26 职场文书
vue修饰符.capture和.self的区别
2022/04/22 Vue.js
MyBatis核心源码深度剖析SQL语句执行过程
2022/05/20 Java/Android
python 判断字符串当中是否包含字符(str.contain)
2022/06/01 Python