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 30 Python
浅析Python中元祖、列表和字典的区别
Aug 17 Python
python数据清洗系列之字符串处理详解
Feb 12 Python
windows系统下Python环境搭建教程
Mar 28 Python
Python列表list内建函数用法实例分析【insert、remove、index、pop等】
Jul 24 Python
python中单例常用的几种实现方法总结
Oct 13 Python
python3实现raspberry pi(树莓派)4驱小车控制程序
Feb 12 Python
如何写python的配置文件
Jun 07 Python
Python实现像awk一样分割字符串
Sep 15 Python
python3中确保枚举值代码分析
Dec 02 Python
关于python中readlines函数的参数hint的相关知识总结
Jun 24 Python
python机器学习Github已达8.9Kstars模型解释器LIME
Nov 23 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中::、->、self、$this几种操作符的区别介绍
2013/04/24 PHP
MongoDB在PHP中的常用操作小结
2014/02/20 PHP
php将12小时制转换成24小时制的方法
2015/03/31 PHP
Laravel 5框架学习之Eloquent (laravel 的ORM)
2015/04/08 PHP
laravel框架实现敏感词汇过滤功能示例
2020/02/15 PHP
PHP安全之register_globals的on和off的区别
2020/07/23 PHP
用javascript获取地址栏参数
2006/12/22 Javascript
如何确保JavaScript的执行顺序 之jQuery.html深度分析
2011/03/03 Javascript
浅析jquery的作用与优势
2013/12/02 Javascript
JavaScript检查某个function是否是原生代码的方法
2014/08/20 Javascript
jQuery自定义元素右键点击事件(实现案例)
2017/04/28 jQuery
还不懂递归?读完这篇文章保证你会懂
2018/07/29 Javascript
angularJs中$scope数据序列化的实例
2018/09/30 Javascript
Echarts之悬浮框中的数据排序问题
2018/11/08 Javascript
详解基于Vue的支持数据双向绑定的select组件
2019/09/02 Javascript
python中sets模块的用法实例
2014/09/30 Python
在Linux下调试Python代码的各种方法
2015/04/17 Python
python创建关联数组(字典)的方法
2015/05/04 Python
栈和队列数据结构的基本概念及其相关的Python实现
2015/08/24 Python
tensorflow实现图像的裁剪和填充方法
2018/07/27 Python
python全栈知识点总结
2019/07/01 Python
Python参数传递对象的引用原理解析
2020/05/22 Python
Python 程序员必须掌握的日志记录
2020/08/17 Python
HTML5网页音乐播放器的示例代码
2017/11/09 HTML / CSS
最新党员的自我评价分享
2013/11/04 职场文书
护理专业学生职业生涯规划范文
2014/03/11 职场文书
社会调查研究计划书
2014/05/01 职场文书
十佳护士先进事迹
2014/05/08 职场文书
2016新年致辞
2015/08/01 职场文书
公司晚宴祝酒词
2015/08/11 职场文书
火锅店的开业营销方案范本!
2019/07/05 职场文书
创业计划书之淘宝网店
2019/10/08 职场文书
Redis数据结构之链表与字典的使用
2021/05/11 Redis
一次MySQL启动导致的事故实战记录
2021/09/15 MySQL
英国数字版游戏销量周榜公布 《小缇娜的奇幻之地》登顶
2022/04/03 其他游戏
MySQL慢查询中的commit慢和binlog中慢事务的区别
2022/06/16 MySQL