遗传算法

#encoding=utf-8
import sys
import csv
import math 
import random
import numpy as np
from numpy import genfromtxt
from sklearn import datasets, linear_model
import file_io as f
rect = 58


data = np.zeros([10,rect], dtype =  int)  


for j in range(10):
  for i in range(10):
    x = np.ones(rect) 
    y = np.random.random_integers(rect-2) 
    x[y]='0'
    data[j]=x
  j+=1


arr=f.getcontent("data1.txt"," ")
narr=np.zeros((len(arr),len(arr[0])-1))
q=np.zeros((1,len(data)))
len_arr=0
for hang in range(0,len(data)):
  lie=0
  for i in range(0,len(data[0])):
    if 1 == data[hang][i]:
      for j in range(0,len(arr)):
        narr[j][lie]=arr[j][i]
      lie+=1
  x = (np.transpose(narr)).T[:, :-1]
  y = (np.transpose(narr)).T[:, -1]
  regr = linear_model.LinearRegression()
  regr.fit(x, y)
  xPred = (np.transpose(narr)).T[:, :-1]
  dyPred = (regr.predict(xPred)-np.transpose(narr)).T[:, -1] 
  q[0][len_arr] = sum(map(abs, dyPred))
  len_arr+=1
  
q_min = min(q[0])
for k in range(0,len(q[0])-1):
  if q_min == q[0][k]:
    break
#以上第一次选优结束


#以下开始写循环


for r in range(2,30):
  zero = np.zeros([10,rect], dtype =  int)
  one = np.ones([10,rect], dtype =  int)
  for j in range(10):
    i=random.randint(1,rect-1)
    one[j][i] = zero[1][1]
    for e in range(rect):
       if data[k][e] == 0:
      one[j][e] = zero[1][1]
  data=one


  arr=f.getcontent("data1.txt"," ")
  narr=np.zeros((len(arr),len(arr[0])-r+1))
  q=np.zeros((1,len(data)))
  len_arr=0
  for hang in range(0,len(data)):
    lie=0
    for i in range(0,len(data[0])):
      if 1 == data[hang][i]:
        for j in range(0,len(arr)):
          narr[j][lie] = arr[j][i]
        lie+=1
    x = (np.transpose(narr)).T[:, :-1]
    y = (np.transpose(narr)).T[:, -1]
    regr = linear_model.LinearRegression()
    regr.fit(x, y)
    xPred = (np.transpose(narr)).T[:, :-1]
    dyPred = (regr.predict(xPred)-np.transpose(narr)).T[:, -1] 
    q[0][len_arr] = sum(map(abs, dyPred))
    len_arr+=1
  
  q_min = min(q[0])
  for k in range(0,len(q[0])-1):
    if q_min == q[0][k]:
      break
  r+=1
print data[k]
print q_min
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值