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 相关文章推荐
python3.5使用tkinter制作记事本
Jun 20 Python
使用python进行波形及频谱绘制的方法
Jun 17 Python
python Gunicorn服务器使用方法详解
Jul 22 Python
Pandas DataFrame中的tuple元素遍历的实现
Oct 23 Python
python os.path.isfile 的使用误区详解
Nov 29 Python
pytorch实现特殊的Module--Sqeuential三种写法
Jan 15 Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
Feb 16 Python
Matplotlib 折线图plot()所有用法详解
Jul 28 Python
pyqt5 textEdit、lineEdit操作的示例代码
Aug 12 Python
Python OpenCV 图像平移的实现示例
Jun 04 Python
python如何为list实现find方法
May 30 Python
python数据分析之单因素分析线性拟合及地理编码
Jun 25 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 extract 将数组拆分成多个变量的函数
2010/06/30 PHP
利用php+mysql来做一个功能强大的在线计算器
2010/10/12 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十一)
2014/06/25 PHP
PHP中list方法用法示例
2016/12/01 PHP
ThinkPHP框架表单验证操作方法
2017/07/19 PHP
Laravel 解决419错误 -ajax请求错误的问题(CSRF验证)
2019/10/25 PHP
php中yii框架实例用法
2020/12/22 PHP
php并发加锁问题分析与设计代码实例讲解
2021/02/26 PHP
用js实现控件的隐藏及style.visibility的使用
2013/06/14 Javascript
js实现在字符串中提取数字
2013/11/05 Javascript
js插件方式打开pdf文件(浏览器pdf插件分享)
2013/12/20 Javascript
JavaScript fontcolor方法入门实例(按照指定的颜色来显示字符串)
2014/10/17 Javascript
基于jQuery Circlr插件实现产品图片360度旋转
2015/09/20 Javascript
JavaScript中如何使用cookie实现记住密码功能及cookie相关函数介绍
2016/11/10 Javascript
js中数组的常用方法小结
2016/12/30 Javascript
animate.css在vue项目中的使用教程
2018/08/05 Javascript
vue项目中极验验证的使用代码示例
2019/12/03 Javascript
JS动态显示倒计时效果
2019/12/12 Javascript
Python pickle模块用法实例分析
2015/05/27 Python
图文讲解选择排序算法的原理及在Python中的实现
2016/05/04 Python
对python内置map和six.moves.map的区别详解
2018/12/19 Python
提升Python效率之使用循环机制代替递归函数
2019/07/23 Python
Python 实现遥感影像波段组合的示例代码
2019/08/04 Python
python 实现多线程下载m3u8格式视频并使用fmmpeg合并
2019/11/15 Python
使用Python第三方库pygame写个贪吃蛇小游戏
2020/03/06 Python
Python如何使用正则表达式爬取京东商品信息
2020/06/01 Python
PHP如何防止SQL注入
2014/05/03 面试题
金融专业毕业生推荐信
2013/11/26 职场文书
幼儿园教师请假制度
2014/01/16 职场文书
给校长的建议书300字
2014/05/16 职场文书
2014镇副书记群众路线专题民主生活会思想汇报
2014/09/23 职场文书
《改造我们的学习》心得体会
2014/11/07 职场文书
意外事故赔偿协议书
2016/03/22 职场文书
numpy数据类型dtype转换实现
2021/04/24 Python
python 实现两个变量值进行交换的n种操作
2021/06/02 Python
python中使用 unittest.TestCase单元测试的用例详解
2021/08/30 Python