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中的__new__、__init__、__call__三个特殊方法
Jun 02 Python
python编程线性回归代码示例
Dec 07 Python
python写一个md5解密器示例
Feb 23 Python
关于Python正则表达式 findall函数问题详解
Mar 22 Python
Python实现判断一行代码是否为注释的方法
May 23 Python
Django ORM 查询管理器源码解析
Aug 05 Python
Python正则表达式学习小例子
Mar 03 Python
如何基于python3和Vue实现AES数据加密
Mar 27 Python
python 字符串格式化的示例
Sep 21 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
Oct 20 Python
Python 求向量的余弦值操作
Mar 04 Python
opencv 分类白天与夜景视频的方法
Jun 05 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
SONY ICF-SW07收音机电路分析
2021/03/02 无线电
php微信支付之APP支付方法
2015/03/04 PHP
PHP模型Model类封装数据库操作示例
2019/03/14 PHP
日期 时间js控件
2009/05/07 Javascript
浅析jquery某一元素重复绑定的问题
2014/01/03 Javascript
JavaScript中对象property的删除方法介绍
2014/12/30 Javascript
JavaScript AOP编程实例
2015/06/16 Javascript
Angular懒加载机制刷新后无法回退的快速解决方法
2016/08/30 Javascript
JS查找字符串中出现最多的字符及个数统计
2017/02/04 Javascript
JavaScript正则替换HTML标签功能示例
2017/03/02 Javascript
js css3实现图片拖拽效果
2017/03/04 Javascript
通过一次报错详细谈谈Point事件
2018/05/17 Javascript
Vue三种常用传值示例(父传子、子传父、非父子)
2018/07/24 Javascript
小程序和web画三角形实现解析
2019/09/02 Javascript
vue 全局环境切换问题
2019/10/27 Javascript
vue自定义组件(通过Vue.use()来使用)即install的用法说明
2020/08/11 Javascript
vue项目在线上服务器访问失败原因分析
2020/08/14 Javascript
Python2.x和3.x下maketrans与translate函数使用上的不同
2015/04/13 Python
django使用图片延时加载引起后台404错误
2017/04/18 Python
python 中random模块的常用方法总结
2017/07/08 Python
python去除字符串中的换行符
2017/10/11 Python
python实现求最长回文子串长度
2018/01/22 Python
python 提取key 为中文的json 串方法
2018/12/31 Python
通过实例了解Python str()和repr()的区别
2020/01/17 Python
Python @property原理解析和用法实例
2020/02/11 Python
python适合做数据挖掘吗
2020/06/16 Python
高考考python编程是真的吗
2020/07/20 Python
Python Spyder 调出缩进对齐线的操作
2021/02/26 Python
使用canvas实现黑客帝国数字雨效果
2020/01/02 HTML / CSS
新东网科技Java笔试题
2012/07/13 面试题
创业计划书中包含的9个方面
2013/12/26 职场文书
学校消防演习方案
2014/02/19 职场文书
我们的节日清明节活动总结
2014/04/30 职场文书
民政局未婚证明
2015/06/15 职场文书
Python实现简繁体转换
2021/06/07 Python
uniapp 微信小程序 自定义tabBar 导航
2022/04/22 Javascript