两家电厂目前各排放8000吨的污染(总计16000吨)。一厂的污染减排成本由MCR1=0.02Q给出,二厂的污染减排成本由MCR2=0.03Q给出,其中Q代表污染减排的吨数。 a. 假设实施一项规定,要求每个工厂减少5000吨的污染。每个公司的污染控制成本将是多少?画两张图(每家公司一张)来支持你的答案,类似于图8.4。 b. 假设实施每吨污染120美元的污染税。现在每个公司将支付多少污染减排成本(不考虑税收)?征税后的总污染减排成本与(a)部分的总成本相比如何?简要解释为什么成本不同。每家公司要支付多少税款?用两张图(每个公司一张)来支持你的答案,类似于图8.4。 c. 最后,假设建立了一个可交易的许可证制度,自由发放6000吨的污染排放许可证,每个工厂有3000个许可证。在没有交易的情况下,每个公司的污染减排成本是多少?用类似于图8.5的图表来支持你的答案,显示10,000吨的总污染减少量。 d. 用你在(c)部分画的同一图表,解释哪家公司将出售许可证(以及数量),哪家公司将购买许可证。假设所有许可证的价格相同,每张许可证的成本是多少?考虑到他们的减污成本和出售许可证的成本(或收入),计算每个公司交易后的净成本,类似于表 8.1。
时间: 2023-03-08 20:18:43 浏览: 226
a. 假设实施一项规定,要求每个工厂减少5000吨的污染,那么第一家电厂的污染控制成本为MCR1*5000=0.02*5000=100,第二家电厂的污染控制成本为MCR2*5000=0.03*5000=150。b. 假设实施每吨污染120美元的污染税,那么第一家电厂的污染控制成本为MCR1*5000+5000*120=0.02*5000+5000*120=1200,第二家电厂的污染控制成本为MCR2*5000+5000*120=0.03*5000+5000*120=1350。征税后的总污染减排成本比(a)部分的总成本要大,这是因为每家公司都需要支付税收,而且每家公司的污染减排成本也会有所增加。每家公司要支付的税款是5000*120=60000。c. 假设建立了一个可交易的许可证制度,自由发放6000吨的污染排放许可证,每个工厂有3000个许可证,那么第一家公司的污染减排成本为MCR1*3000=0.02*3000=60,第二家公司的污染减排成本为MCR2*3000=0.03*3000=90。d. 根据第一家公司的污染减排成本为MCR1*3000=0.02*3000=60,第二家公司的污染减排成本为MCR2*3000=0.03*3000=90,第一家公司将出售3000张许可证,第二家公司将购买3000张许可证。假设所有许可证的价格相同,每张许可证的成本是120美元。考虑到他们的减污成本和出售许可证的成本(或收入),第一家公司交易后的净成本为60-3000*120=-35400,第二家公司交易后的净成本为90+3000*120=36000。
相关问题
//CAN相关设置 MX_CAN1_Init(0xf);//波特率设置 Can_Init_Struct(); Can_RxFilter_Init();//ID过滤设置:不过滤任何ID(任何ID都允许通过),这句话必需有,否则接收不到CAN1数据 HAL_CAN_Start(&hcan1);//启动CAN1,这样后面才能发送数据 //启动CAN收发计时 //hcan1.Instance->MCR|=0x80;//TTCM=1:启动CAN时间,CAN 硬件的内部计数器激活,在接收和发送时,都会在帧起始位的采样点捕获内部计数器放入CAN_RDTxR/CAN_TDTxR寄存器中 CAN1->MCR|=0x80;//TTCM=1:启动CAN时间,CAN 硬件的内部计数器激活,在接收和发送时,都会在帧起始位的采样点捕获内部计数器放入CAN_RDTxR/CAN_TDTxR寄存器中根据上面程序再增加CAN1使能中断
在上面的代码中,我们可以在启动CAN1后,使用`CAN_ITConfig`函数来使能CAN1的接收中断。具体代码如下:
```c
//CAN相关设置
MX_CAN1_Init(0xf);//波特率设置
Can_Init_Struct();
Can_RxFilter_Init();//ID过滤设置:不过滤任何ID(任何ID都允许通过),这句话必需有,否则接收不到CAN1数据
HAL_CAN_Start(&hcan1);//启动CAN1,这样后面才能发送数据
//启动CAN收发计时
//hcan1.Instance->MCR|=0x80;//TTCM=1:启动CAN时间,CAN 硬件的内部计数器激活,在接收和发送时,都会在帧起始位的采样点捕获内部计数器放入CAN_RDTxR/CAN_TDTxR寄存器中
CAN1->MCR|=0x80;//TTCM=1:启动CAN时间,CAN 硬件的内部计数器激活,在接收和发送时,都会在帧起始位的采样点捕获内部计数器放入CAN_RDTxR/CAN_TDTxR寄存器中
//使能CAN1接收中断
CAN_ITConfig(CAN1, CAN_IT_FMP, ENABLE);
```
在上面的代码中,我们使用`CAN_ITConfig`函数使能了CAN1的接收中断,并传入了`CAN_IT_FMP`作为第二个参数,表示当FIFO挂号接收到新数据时触发中断。在此之后,当CAN1接收到数据时,中断处理函数会被自动调用。
将以下代码转换为python:%产生初始种群 flag11=1; while flag11==1 GApop0=zeros(popsize,8*M+6); for i=1:popsize GApop0(i,:)=zcode(M,N); end fitness=zeros(popsize,1);%费用 fitness1=zeros(popsize,1);%适应度函数 a=zeros(popsize,2*M+3+N-1); %工期 bestChrom=zeros(maxgen,8*M+6); bestfit=zeros(maxgen,1); %每代最优费用 bestT=zeros(maxgen,2*M+3+N-1); %每代最优费用对应的工期 elite=zeros(maxgen,8*M+6); %精英解 elitefit=zeros(maxgen,1); %精英值 for j=1:popsize a(j,:)=ztime(GApop0(j,:),M,N,Tn0,Tn1,Q,ST0); fitness(j,1)=zcost(GApop0(j,:),M,N,a(j,1),a(j,2:2*M+3),a(j,2*M+4:2*M+2+N),LCR,ECR,MCR,FC,ICR,Q); end for j=1:popsize if a(j,1) > maxT fitness(j,1)=10^100; end end if all(fitness(:,1)==10^100) flag11=1; %重新生成初始种群 else flag11=0; end end fitness1=1./fitness; %适应度值取倒数,成本最小,倒数最大 %精英选择 indexmin=find(fitness==min(fitness));%查找非零元素的索引和值 if length(indexmin)>1 indexmin=randsample(indexmin,1);%从整数1到indexmin中无放回随机均匀抽取1个值。 end elite(1,:)=GApop0(indexmin,:); elitefit(1,:)=fitness(indexmin,:);
以下是 Python 代码:
```python
flag11 = 1
while flag11 == 1:
GApop0 = np.zeros((popsize, 8*M+6))
for i in range(popsize):
GApop0[i, :] = zcode(M, N)
fitness = np.zeros((popsize, 1)) # 费用
fitness1 = np.zeros((popsize, 1)) # 适应度函数
a = np.zeros((popsize, 2*M+3+N-1)) # 工期
bestChrom = np.zeros((maxgen, 8*M+6))
bestfit = np.zeros((maxgen, 1)) # 每代最优费用
bestT = np.zeros((maxgen, 2*M+3+N-1)) # 每代最优费用对应的工期
elite = np.zeros((maxgen, 8*M+6)) # 精英解
elitefit = np.zeros((maxgen, 1)) # 精英值
for j in range(popsize):
a[j, :] = ztime(GApop0[j, :], M, N, Tn0, Tn1, Q, ST0)
fitness[j, 0] = zcost(GApop0[j, :], M, N, a[j, 0], a[j, 1:2*M+3], a[j, 2*M+4:2*M+2+N], LCR, ECR, MCR, FC, ICR, Q)
for j in range(popsize):
if a[j, 0] > maxT:
fitness[j, 0] = 10 ** 100
if np.all(fitness[:, 0] == 10 ** 100):
flag11 = 1 # 重新生成初始种群
else:
flag11 = 0
fitness1 = 1 / fitness # 适应度值取倒数,成本最小,倒数最大
# 精英选择
indexmin = np.where(fitness == np.min(fitness))[0] # 查找非零元素的索引和值
if len(indexmin) > 1:
indexmin = np.random.choice(indexmin, size=1) # 从整数1到indexmin中无放回随机均匀抽取1个值。
elite[0, :] = GApop0[indexmin[0], :]
elitefit[0, :] = fitness[indexmin[0], :]
```
需要注意的是,Python 中的 `zeros` 函数用于创建指定大小的全零数组,而 MATLAB 中的 `zeros` 函数不仅可以创建全零数组,还可以创建指定大小的全零矩阵。因此,在 Python 中需要使用 `np.zeros` 函数创建全零数组。另外,Python 中的 `where` 函数返回的是符合条件的元素的下标,需要通过 `[0]` 取出第一个元素的下标。
阅读全文