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实现从一组颜色中找出与给定颜色最接近颜色的方法
Mar 19 Python
Python爬取网易云音乐上评论火爆的歌曲
Jan 19 Python
解决Python 中英文混输格式对齐的问题
Jul 16 Python
python实现连续图文识别
Dec 18 Python
python 将对象设置为可迭代的两种实现方法
Jan 21 Python
Python的log日志功能及设置方法
Jul 11 Python
Python安装selenium包详细过程
Jul 23 Python
python requests使用socks5的例子
Jul 25 Python
Python利用PyExecJS库执行JS函数的案例分析
Dec 18 Python
在pytorch中对非叶节点的变量计算梯度实例
Jan 10 Python
python3 实现口罩抽签的功能
Mar 11 Python
python3中celery异步框架简单使用+守护进程方式启动
Jan 20 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
WinXP + Apache +PHP5 + MySQL + phpMyAdmin安装全功略
2006/07/09 PHP
Oracle Faq(Oracle的版本)
2006/10/09 PHP
php中fgetcsv()函数用法实例
2014/11/28 PHP
php根据生日计算年龄的方法
2015/07/13 PHP
PHP实现基于PDO扩展连接PostgreSQL对象关系数据库示例
2018/03/31 PHP
Javascript 写的简单进度条控件
2008/01/22 Javascript
地震发生中逃生十大法则
2008/05/12 Javascript
JS Array对象入门分析
2008/10/30 Javascript
小米公司JavaScript面试题
2014/12/29 Javascript
NodeJS中Buffer模块详解
2015/01/07 NodeJs
JavaScript的事件代理和委托实例分析
2015/03/25 Javascript
JS时间特效最常用的三款
2015/08/19 Javascript
JS获取url参数、主域名的方法实例分析
2016/08/03 Javascript
基本DOM节点操作
2017/01/17 Javascript
vue调用高德地图实例代码
2017/04/28 Javascript
vue props传值失败 输出undefined的解决方法
2018/09/11 Javascript
js中async函数结合promise的小案例浅析
2019/04/14 Javascript
js图片无缝滚动插件使用详解
2020/05/26 Javascript
Python 元组(Tuple)操作详解
2014/03/11 Python
Python中规范定义命名空间的一些建议
2016/06/04 Python
你应该知道的python列表去重方法
2017/01/17 Python
Python使用Matplotlib实现雨点图动画效果的方法
2017/12/23 Python
微信跳一跳python辅助软件思路及图像识别源码解析
2018/01/04 Python
pycharm下查看python的变量类型和变量内容的方法
2018/06/26 Python
使用OpenCV实现仿射变换—旋转功能
2019/08/29 Python
Python生成个性签名图片获取GUI过程解析
2019/12/16 Python
Python遍历字典方式就实例详解
2019/12/28 Python
一文了解python 3 字符串格式化 F-string 用法
2020/03/04 Python
python excel多行合并的方法
2020/12/09 Python
电大毕业自我鉴定
2014/02/03 职场文书
高考标语大全
2014/06/05 职场文书
nginx网站服务如何配置防盗链(推荐)
2021/03/31 Servers
Python利器openpyxl之操作excel表格
2021/04/17 Python
MySQL 中如何归档数据的实现方法
2022/03/16 SQL Server
漫画「你在春天醒来」第10卷封面公开
2022/03/21 日漫
PHP 时间处理类Carbon
2022/05/20 PHP