我正在尝试将部分代码从Python重写为C。我甚至重写了它,但它返回不正确的结果,我看不到一个错误。有人能说这是怎么回事吗?可能是个小错误。。。你知道吗
下面是Python代码:
maximals = maximals.groupby(maximals.index.month)['avg'].nlargest(10)
SSV = 3.8
SOP = 7.78
costs = []
power_max = np.ceil(np.sort(maximals.values)[-1])
power_safe = np.ceil(11/10 * power_max)
for contr_power in range(0,int(2*power_max)):
excess = [maximals.values[i] - contr_power for i in range(0,len(maximals.values)) if maximals.values[i] > contr_power]
cost = len(months) * (SSV+SOP) * contr_power + SSV * sum(excess)
costs.append([contr_power, cost])
costs_df = pd.DataFrame(costs, columns = ['contr_power', 'cost'])
power_optim = costs_df.sort_values(by='cost').contr_power.values[0]
这是我的C代码。在本例中,变量“result”与Python代码中的“maximals”相同:
var pMax = result.Max(v => v.Value);
powerAvgValues.powerMax = Math.Ceiling(pMax);
powerAvgValues.powerSafe = Math.Ceiling(1.1*pMax);
var months = result.AsEnumerable()
.GroupBy(m => new { m.Time.Month })
.Distinct()
.ToList();
var SSV = 3.8;
var SOP = 7.78;
var monthsCount = months.Count;
for (var contr_power = 0; contr_power < 2 * (int)pMax; contr_power++)
{
for (int i = 0; i < result.Count; i++)
{
if (result[i].Value > contr_power)
{
var excess = result[i].Value - contr_power;
excessList.Add(excess);
}
}
var cost = monthsCount * (SSV + SOP) * contr_power + SSV * excessList.Sum();
var itemToCosts = new Costs();
itemToCosts.contr_power = contr_power;
itemToCosts.cost = cost;
costs.Add(itemToCosts);
}
var power_optim = costs.AsEnumerable()
.OrderBy(c => c.cost)
.Min(d => d.contr_power);
powerAvgValues.powerOptim = power_optim;
目前没有回答
相关问题 更多 >
编程相关推荐