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 文件操作技巧(File operation) 实例代码分析
Aug 11 Python
Python中for循环控制语句用法实例
Jun 02 Python
十个Python程序员易犯的错误
Dec 15 Python
Python实现的堆排序算法示例
Apr 29 Python
python实现数据导出到excel的示例--普通格式
May 03 Python
Python 从subprocess运行的子进程中实时获取输出的例子
Aug 14 Python
关于PyTorch 自动求导机制详解
Aug 18 Python
使用python写一个自动浏览文章的脚本实例
Dec 05 Python
pytorch动态网络以及权重共享实例
Jan 06 Python
python使用smtplib模块发送邮件
Dec 17 Python
十个Python自动化常用操作,即拿即用
May 10 Python
解析python中的jsonpath 提取器
Jan 18 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 在windows下配置虚拟目录的方法介绍
2013/06/26 PHP
php实现利用phpexcel导出数据
2013/08/24 PHP
PHP实现的简单缓存类
2015/07/29 PHP
制作个性化的WordPress登陆界面的实例教程
2016/05/21 PHP
[原创]smarty简单模板变量输出方法
2016/07/09 PHP
PHP解密支付宝小程序的加密数据、手机号的示例代码
2021/02/26 PHP
JavaScript中的变量作用域介绍
2014/12/31 Javascript
Javascript无参数和有参数类继承问题解决方法
2015/03/02 Javascript
js实现跨域的多种方法
2015/12/25 Javascript
jQuery中通过ajax的get()函数读取页面的方法
2016/02/29 Javascript
jQuery实现公告新闻自动滚屏效果实例代码
2016/07/14 Javascript
Angular 通过注入 $location 获取与修改当前页面URL的实例
2017/05/31 Javascript
vue 打包后的文件部署到express服务器上的方法
2017/08/09 Javascript
Node.JS更改Windows注册表Regedit的方法小结
2017/08/18 Javascript
react 实现页面代码分割、按需加载的方法
2018/04/03 Javascript
JS实现数组去重及数组内对象去重功能示例
2019/02/02 Javascript
LayUI switch 开关监听 获取属性值、更改状态的方法
2019/09/21 Javascript
javaScript 实现重复输出给定的字符串的常用方法小结
2020/02/20 Javascript
微信小程序实现弹框效果
2020/05/26 Javascript
[40:17]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第一场
2018/04/06 DOTA
[38:38]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.17
2020/12/18 DOTA
python 读取excel文件生成sql文件实例详解
2017/05/12 Python
Python探索之ModelForm代码详解
2017/10/26 Python
Django使用AJAX调用自己写的API接口的方法
2019/03/06 Python
python验证身份证信息实例代码
2019/05/06 Python
python实现批量文件重命名
2019/10/31 Python
利用matplotlib实现根据实时数据动态更新图形
2019/12/13 Python
Python 时间戳之获取整点凌晨时间戳的操作方法
2020/01/28 Python
python实现录制全屏和选择区域录屏功能
2021/02/05 Python
详解利用css3的var()实现运行时改变scss的变量值
2021/03/02 HTML / CSS
英国知名的皮手套品牌:Dents
2016/11/13 全球购物
阿迪达斯英国官方网站:adidas英国
2019/08/13 全球购物
小学防溺水制度
2014/01/29 职场文书
大学生简历自我评价2015
2015/03/03 职场文书
超市食品安全承诺书
2015/04/29 职场文书
2016父亲节感恩话语
2015/12/09 职场文书