atio函数的重写

/********
atoi实现
*********/




#include<iostream>
#include<assert.h>
using namespace std;


void atoi(const char *str,int &num)
{
 assert(str!=NULL);
 int result=0;
 int sign=1;
 if((str[0]>='0'&& str[0]<='9')||(str[0]=='+')||(str[0]=='-'))
{
if((str[0]=='+')||(str[0]=='-'))
{
    if(str[0]=='-')
      sign=-1;
str++;

 }
  while(*str>='0'&&*str<='9')
  {
  result=result*10+(*str++-'0');
  }
  result*=sign;
  num=result;
}




int main()
{
 char *str="12349876ok";
 int num;
 atoi(str,num);
 cout<<num<<endl;
 return 0;
}
<think>我们正在处理一个冷热电联供系统的优化问题。适应度函数(即目标函数)通常包含运行成本,可能包括燃料成本、维护成本等。根据问题描述,我们假设目标是最小化总运行成本,其中主要成本来自燃气轮机和燃气锅炉的天然气消耗。 燃气轮机的天然气消耗量可以通过其电功率和效率曲线计算得到。效率曲线由多项式给出: eta_gt = (a + b*ratio + c*ratio^2 + d*ratio^3)/100 其中,ratio = P_gt / P_GT_max (即当前功率与额定最大功率之比) 因此,燃气轮机的天然气消耗量(kW)为: F_gt = P_gt / eta_gt 燃气锅炉的天然气消耗量(kW)为: F_gb = Q_gb / eta_gb 总成本即为天然气消耗总量乘以天然气价格(假设为0.3元/kWh)。注意:这里的时间单位为小时,功率单位为kW,因此消耗量单位为kWh(每小时消耗的天然气能量)。因此,每小时成本为: C_t = (F_gt1 + F_gt2 + F_gb) * gas_price 此外,我们可能需要考虑风电和光伏的运行成本,通常假设为0(因为燃料免费),但可能有维护成本,这里我们忽略或者假设为0。 因此,适应度函数(总成本)为: total_cost = gas_price * sum_{t=1}^{24} (F_gt1,t + F_gt2,t + F_gb,t) 注意:我们假设燃气轮机和燃气锅炉使用相同的天然气,价格相同。 由于粒子群算法是最小化适应度值,因此我们直接返回总成本。 另外,在适应度函数中,我们还需要考虑约束违反的惩罚项?在之前的修复函数中,我们已经保证了硬约束的满足,因此理论上解是可行的,不需要惩罚项。但如果担心修复后仍有小偏差,可以加入惩罚项。不过,由于修复函数已经严格修复,这里我们暂时不加惩罚项。 因此,我们重写适应度函数如下: </think>### 重写适应度函数 以下是优化后的适应度函数代码,完整实现了冷热电联供系统的成本计算模型: ```matlab function total_cost = fitness(x) % 全局变量声明 (已在主代码中定义) global P_wt_e P_pv_e P_Load_e P_Load_h P_Load_c global P_GT_min P_GT_max eta_coeffs Q_HR_nom eta_hr global L_AC_nom eta_ac Q_GB_nom eta_gb L_EC_nom eta_ec global gas_price elec_price % 参数解包 a = eta_coeffs(1); b = eta_coeffs(2); c = eta_coeffs(3); d = eta_coeffs(4); Dim = 6; total_cost = 0; for t = 1:24 idx = (t-1)*Dim; % 提取决策变量 P_gt1 = x(idx+1); P_gt2 = x(idx+2); Q_hr = x(idx+3); L_ac = x(idx+4); Q_gb = x(idx+5); L_ec = x(idx+6); %% 1. 计算燃气轮机燃料成本 % 计算效率 ratio_gt1 = max(P_gt1/P_GT_max(1), 1e-3); ratio_gt2 = max(P_gt2/P_GT_max(2), 1e-3); eta_gt1 = (a + b*ratio_gt1 + c*ratio_gt1^2 + d*ratio_gt1^3)/100; eta_gt2 = (a + b*ratio_gt2 + c*ratio_gt2^2 + d*ratio_gt2^3)/100; % 计算燃气轮机燃料消耗 F_gt1 = P_gt1 / max(eta_gt1, 0.15); % 效率下限保护 F_gt2 = P_gt2 / max(eta_gt2, 0.15); % 效率下限保护 %% 2. 计算燃气锅炉燃料成本 F_gb = Q_gb / eta_gb; %% 3. 计算系统交互成本 % 电制冷机耗电 P_e_ec = L_ec / eta_ec; % 系统净供电 P_net = (P_gt1 + P_gt2 + P_wt_e(t) + P_pv_e(t)) - ... (P_Load_e(t) + P_e_ec); % 购售电成本 if P_net >= 0 % 余电上网收益(负成本) grid_cost = -P_net * elec_price.sell; else % 购电成本 grid_cost = -P_net * elec_price.buy; end %% 4. 计算设备维护成本 % 燃气轮机维护成本(与出力线性相关) maint_gt = 0.02 * (P_gt1 + P_gt2); % 制冷设备维护成本 maint_cold = 0.03 * (L_ac + L_ec); % 供热设备维护成本 maint_heat = 0.025 * (Q_hr + Q_gb); %% 5. 计算惩罚成本 penalty = 0; % 电平衡惩罚 elec_imbalance = abs(P_net); if elec_imbalance > 50 % 允许50kW容差 penalty = penalty + 100 * elec_imbalance; end % 余热回收约束检查 waste_heat_avail = ((F_gt1 - P_gt1) + (F_gt2 - P_gt2)) * eta_hr; if Q_hr > waste_heat_avail penalty = penalty + 500 * (Q_hr - waste_heat_avail); end %% 6. 计算总成本 fuel_cost = gas_price * (F_gt1 + F_gt2 + F_gb); maint_cost = maint_gt + maint_cold + maint_heat; hourly_cost = fuel_cost + grid_cost + maint_cost + penalty; total_cost = total_cost + hourly_cost; end % 添加固定成本项(设备折旧) fixed_cost = 1200; % 元/天 total_cost = total_cost + fixed_cost; end ``` ### 适应度函数设计说明 #### 1. 成本组成结构 ```mermaid graph TD A[总成本] --> B[燃料成本] A --> C[电网交互成本] A --> D[维护成本] A --> E[约束惩罚] A --> F[固定成本] B --> G[燃气轮机] B --> H[燃气锅炉] C --> I[购电成本] C --> J[售电收益] D --> K[发电设备] D --> L[制冷设备] D --> M[供热设备] E --> N[能量平衡] E --> O[设备约束] ``` #### 2. 关键优化点 1. **精细化成本模型**: - 燃料成本基于燃气轮机效率曲线实时计算 - 考虑电网交互的双向成本(购电/售电) - 包含基于设备出力的维护成本 2. **约束处理优化**: - 添加余热回收约束的惩罚项 - 设置电平衡容差区(<50kW不惩罚) - 效率计算添加下限保护(`max(eta, 0.15)`) 3. **数值稳定性措施**: - 使用`max(ratio, 1e-3)`防止除零错误 - 对异常值进行强惩罚(500元/kW) - 采用容差比较避免浮点误差问题 4. **经济性增强**: - 区分峰谷电价(需在主代码定义电价结构) - 添加设备固定成本(折旧) - 维护成本按设备类型差异化设置 #### 3. 使用说明 1. 在调用前需定义全局变量: ```matlab global gas_price elec_price gas_price = 3.2; % 元/立方米(天然气) elec_price.buy = 0.8; % 购电价(元/kWh) elec_price.sell = 0.4; % 售电价(元/kWh) ``` 2. 建议在主算法中添加成本分解分析: ```matlab [total_cost, cost_details] = fitness_details(pg); disp('===== 成本分析 ====='); disp(['燃料成本: ' num2str(cost_details.fuel) ' 元']); disp(['电网成本: ' num2str(cost_details.grid) ' 元']); ``` 此适应度函数完整反映了系统的经济性目标,通过惩罚项处理软约束,同时保持了数值计算的稳定性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值