题目描述:
继续更新
再更问题三
继续更新第一问、第四问
import random #
导⼊模块
import pandas as pd
import numpy as np import matplotlib.pyplot as plt from datetime import datetime From sympy import symbols,solve,linsolve
x=symbols('x')
f1=(5/6)*x*0.01+0.833-0.90
print(solve([f1<=0,f2<=0]))
f3=4*x+200-222 #求解等式
print(solve(4*x+200-222,x)) #
⼦程序:定义优化问题的⽬标函数 def cal_Energy(X, nVar, mk): #
m(k):惩罚因⼦,随迭代次数 k 逐渐增 ⼤
p1 = (max(0, 6*X[0]+5*X[1]-60))**2
p2 = (max(0, 10*X[0]+20*X[1]-150))**2 fx = -(10*X[0]+9*X[1]) return fx+mk*(p1+p2) # ⼦程序:模拟退⽕算法的参数设置
def ParameterSetting(): cName = "funcOpt" #
定义问题名称 YouCans, XUPT nVar = 2 # 给定⾃变量数量,
y=f(x1,..xn) xMin = [0, 0] xMax = [8, 8] tInitial = 100.0 tFinal = 1 13
alfa = 0.98 meanMarkov = 100 #
Markov 链长度,也即内循环运⾏次数 scale = 0.5 #
定义搜索步长,可以设为固定值或逐渐缩⼩ return cName, nVar, xMin, xMax, tInitial, tFinal, alfa, meanMarkov, scale# 模拟退⽕算法
def OptimizationSSA(nVar,xMin,xMax,tInitial,tFinal,alfa,meanMarkov,scale) :
# ====== 初始化随机数发⽣器 ====== randseed = random.randint(1, 100) random.seed(randseed) # 随机数发⽣器设置种⼦,也可以设为指定整数 # ====== 随机产⽣优化问题的初始解 ====== xInitial = np.zeros((nVar)) # 初始化,
创建数组
for v in range(nVar): # xInitial[v] = random.uniform(xMin[v], xMax[v]) #
产⽣ [xMin, xMax] 范围的随机实数 xInitial[v] = random.randint(xMin[v], xMax[v]) #
产⽣ [xMin, xMax] 范围的随机整数 #
调⽤⼦函数 cal_Energy 计算当前解的⽬标函数值 fxInitial = cal_Energy(xInitial, nVar, 1)
# m(k):惩罚因⼦,初值为 1
# ====== 模拟退⽕算法初始化 ====== xNew = np.zeros((nVar)) #
初始化,创建数组 xNow = np.zeros((nVar)) # 初
始化,创建数组 xBest = np.zeros((nVar)) #
初始化,创建数组 xNow[:] = xInitial[:] #
初始化当前解,将初始解置为当前解 xBest[:] = xInitial[:] # 初始化最优解,将当前解置为最优解 fxNow = fxInitial # 将初始解的⽬标函数置为当前值
误差因子检验部分代码如下:
误差因子分析:
load ('text.mat');
X=data;
z=zscore(X)
%数据标准化
M=cov(z)
[V,D]=eig(M); d=diag(D); )
eig1=sort(d,'descend')
v=fliplr(V)
S=0; i=0;
while S/sum(eig1)<0.85 i=i+1;
S=S+eig1(i); end
NEW=z*v(:,1:i)
18 W=100*eig1/sum(eig1) figure(1) pareto(W);
title('贡献率直方图');
L =(v') * diag(sqrt(eig1)); %方差贡献
Var = sum((L.^2)); %排序
Temp = [Var;1:length(Var)];
VarTemp = flipud(sortrows(Temp',1));
L = L(:,VarTemp(:,2));
Var = VarTemp(:,1);
j = 0; Sum = 0;
while Sum/sum(Var) <0.85 j= j +1;
Sum = Sum + Var(j);
end L_main = L(:,1:j);
H = sum((L_main.^2),2);
VarContr = 100 * Var/sum(Var);
figure(2) pareto(VarContr);
title('因子旋转前方差贡献度'); [L_New,psi,T,stats,F]=factoran(z,j,'rotate','varimax','scores','T homson');
19 %新的共同度 H = sum((L_New.^2),2);
2:第二小问类似 但是不是换电站地址不同 需要设两个变量
from sympy import symbols,solve,linsolve
x,y=symbols('x y')
f1=0.833-0.9+0.01*x*(1/3)+0.05-0.01*y*0.5
print(solve([f1,f2]))
print(linsolve([f1,f2],(x,y)))
3:第三问要自己去查一下相关材料的价格进行调度安排,以下是部分成本的价格
且该运输车的行驶情况与问题1类似。通过网上查询资料可知,一辆电动运输车的均价为约为9万元,则在118辆车所构成的一个循环中,所需要的车辆成本为1062万元。
经查询深圳电价统计局以及深圳市新能源电动汽车网,我们可发现该换电站选址处所使用的电为10千伏高供高计,且每个充电桩的功率7kw,而一个电池组充电时间约为3小时,则每个电池组的容量约为21kw.h,则一个循环所使用的电量为13608kw h
那么最后最低成本问题可以化简为电价最低,因为其他几项成本基本上可以固定,不会有太大的变化
考虑峰谷电价的影响,需知一单位千瓦时各阶段时的成本,即高峰时的价格,低谷时的价格。经中国南方电网查询,得
用电类别(每月) | 10千伏高供高计 | |||
峰 | 平 | 谷 | ||
大量工商业及其他用电 | 250KW H及以下 | 1.02756875 | 0.67506875 | 0.23105875 |
250KW H及以上 | 1.00758875 | 0.65506875 | 0.21106875 |
再者,还需知峰谷电价各个阶段的时间,参考深圳市居民生活电价表里的峰谷电价阶段的各个时段:
表2 电价阶段时间表
电价阶段 | 时间 |
峰期 | 10:00-12:00,14:00-19:00 |
平期 | 8:00-10:00,12:00-14:00,19:00-24:00 |
谷期 | 0:00-8:00 |
为了保证3年结算周期投资运行成本最低,即应保证换电站的个数尽可能少,则我们可以选择建立一个类似问题一的双向同址的换电站,经查询,一个充换电站成本约为260万元。
from sympy import symbols,solve
totalElectricity=648*21
max=1.0075
average=0.655
min=0.211
averagecost=9*60/464*13608*average
print("低谷电价为",c3,"单位为万元")
print("车辆成本为",c4,"单位为万元")
print("换电设备成本为",c5,"单位为万元")
print("3年内总最低成本为",totalcost,"单位为万元")
想具体了解可 关注后 私信我
第四问部分代码如下
From sympy import symbols,solve,linsolve
X1=symbols('x1')
f1=(5/6)*x1*0.01+0.833-0.90
print(solve([f1<=0,f2<=0]))
如想了解更多可以点赞关注收藏然后私信,这样系统提醒比较及时