标段X19~X24桥墩间超高曲线段桥梁工程概预算及分析。该工程段桥梁处于双向处于超高曲线弯曲段,双向四车道箱型梁,主要桥梁部分为变截面3跨连续刚构桥,在大桥土建工程算量基础上,计算直接费用、间接费用。
时间: 2023-03-06 08:43:38 浏览: 68
根据该桥梁工程段的特点,本桥梁工程概预算及分析应包括直接费用和间接费用。直接费用主要指施工材料、施工机械设备、施工人员工资及施工费用等;间接费用主要指经营管理费用、设计费用、施工期综合管理费用等。根据该桥梁工程段的地形条件及材料等要求,可进行分析计算,以便确定本桥梁工程段的概预算。
相关问题
请在上述提供的几段代码的基础上,继续写代码,求出最优解和最优解向量
好的,接下来我给出完整代码来求解最优解和最优解向量:
```
import numpy as np
import pickle
from cma import CMAEvolutionStrategy as CMA
def quadratic(bd_X, bd_Y, x3, x4):
x1 = 0.25*(((DX*(bd_X-1))**2 + (DY*(bd_Y-1))**2)**0.5+ ((DX*(51-bd_X))**2 + (DY*(bd_Y-1))**2)**0.5 + ((DX*(bd_X-1))**2 + (DY*(51-bd_Y))**2)**0.5 + ((DX*(51-bd_X))**2 + (DY*(51-bd_Y))**2)**0.5)
x2 = (((bd_X-mbjx)**2 + (bd_Y-mbjy)**2 )**0.5)*DX
x5 = train_optimize2[4]
x6 = train_optimize2[5]
x7 = train_optimize2[6]
x8 = train_optimize2[7]
x9 = train_optimize2[8]
x10 = train_optimize2[9]
x11 = train_optimize2[10]
x12 = train_optimize2[11]
x13 = train_optimize2[12]
x14 = train_optimize2[13]
x15 = train_optimize2[14]
x16 = train_optimize2[15]
x17 = train_optimize2[16]
x18 = train_optimize2[17]
x19 = train_optimize2[18]
with open('regressor_model.pkl', 'rb') as f:
model = pickle.load(f)
x_train = np.array([[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14,x15,x16,x17,x18,x19]])
y_predict = model.predict(x_train)
Y = y_predict
return -Y
def main():
# X坐标束条件
Min_pump_zcjj = 26
Max_pump_zcjj = 51
# Y坐标约束条件
Min_pump_bdljd = 26
Max_pump_bdljd = 51
# 靶点位置约束条件
Min_pump_bdwz = 0
Max_pump_bdwz = 1
# 射孔厚度约束条件
Min_pump_skhd = 1
Max_pump_skhd = 5
bounds = np.array([[Min_pump_zcjj, Max_pump_zcjj], [Min_pump_bdljd, Max_pump_bdljd],[Min_pump_bdwz, Max_pump_bdwz],[Min_pump_skhd, Max_pump_skhd]])
target = -(train_optimize2[19])
# 定义你的优化时间限制,输入是一个数值,表示你想要优化的最长时间(秒)
timeout = 30
optimizer = CMA(mean=np.mean(bounds, axis=1), sigma=1, bounds=bounds, seed=0)
while True:
solutions = optimizer.ask()
fitness_list = []
for s in solutions:
fitness_list.append(quadratic(*s))
optimizer.tell(solutions, fitness_list)
best_index = np.argmin(fitness_list)
best_fit = fitness_list[best_index]
best_sol = solutions[best_index]
if -best_fit < target or optimizer.countiter >= timeout:
break
return best_sol, -best_fit
if __name__ == '__main__':
train_optimize2 = [26.0, 26.0, 0.0, 1.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, -0.735]
DX = 0.5
DY = 0.5
mbjx = 30.5
mbjy = 30.5
best_sol, best_fit = main()
print("最优解向量为:", best_sol)
print("最优解为:", best_fit)
```
在这段代码中,首先我们导入了必要的库,然后定义了目标函数quadratic()和优化函数main(),其中目标函数的参数和实现与之前一致,而main()函数则是将目标函数与优化算法结合起来,求出最优解和最优解向量。在main()函数中,我们首先定义了X坐标、Y坐标、靶点位置和射孔厚度的约束条件,并将它们组成一个二维数组bounds;然后定义了目标函数的值target和优化时间限制timeout;最后创建了一个CMA对象optimizer,并在while循环中进行迭代,直到找到满足目标函数要求或达到时间限制为止。在每次迭代中,我们通过调用ask()方法获取一组新的解,并调用目标函数计算它们的适应度,然后将解和适应度传递给tell()方法,让优化算法进行更新。在每次迭代结束后,我们通过调用np.argmin()方法找到当前最优解的索引,然后保存最优解和最优解向量,并检查是否满足终止条件。最后,我们在if语句中返回最优解向量和最优解的负数值。最后,在代码的最后一行,我们输出最优解向量和最优解的负数值。
数据段中存储着一个长度为10的字符串,请编写RISC-V汇编程序,找出其中的回文子串
以下是一个简单的RISC-V汇编程序,可以找出长度为10的字符串中的回文子串。
```
.data
str: .asciiz "abccbaabba"
.text
.globl main
main:
la x10, str # 将字符串地址存储到寄存器x10中
li x11, 0 # 设置x11为0,用于计数
li x12, 0 # 设置x12为0,用于存储最长回文子串长度
li x13, 0 # 设置x13为0,用于存储最长回文子串的开始位置
li x14, 0 # 设置x14为0,用于存储最长回文子串的结束位置
li x15, 10 # 设置x15为10,表示字符串长度
# 外层循环,枚举每个字符作为回文子串的中心
addi x16, x15, -1 # 用x16存储字符串最后一个字符的下标
addi x17, x15, -2 # 用x17存储字符串倒数第二个字符的下标
addi x18, x15, -3 # 用x18存储字符串倒数第三个字符的下标
addi x19, x15, -4 # 用x19存储字符串倒数第四个字符的下标
addi x20, x15, -5 # 用x20存储字符串倒数第五个字符的下标
addi x21, x15, -6 # 用x21存储字符串倒数第六个字符的下标
addi x22, x15, -7 # 用x22存储字符串倒数第七个字符的下标
addi x23, x15, -8 # 用x23存储字符串倒数第八个字符的下标
addi x24, x15, -9 # 用x24存储字符串倒数第九个字符的下标
loop1:
jal check_palindrome # 调用子程序,检查以当前字符为中心的回文子串
addi x11, x11, 1 # 计数器加1
bge x11, x15, end # 如果已经枚举完所有字符,则跳转到end
# 如果当前字符不是倒数第三个及倒数第四个字符,则跳过下一步
bge x11, x17, loop2
# 如果当前字符和下一个字符相同,则跳过下一步
lbu x25, 0(x10)
lbu x26, 1(x10)
beq x25, x26, loop2
# 如果当前字符和下两个字符相同,则跳过下一步
lbu x25, 0(x10)
lbu x26, 2(x10)
beq x25, x26, loop2
# 如果当前字符和下三个字符相同,则跳过下一步
lbu x25, 0(x10)
lbu x26, 3(x10)
beq x25, x26, loop2
# 如果当前字符和下四个字符相同,则跳过下一步
lbu x25, 0(x10)
lbu x26, 4(x10)
beq x25, x26, loop2
# 如果当前字符和下五个字符相同,则跳过下一步
lbu x25, 0(x10)
lbu x26, 5(x10)
beq x25, x26, loop2
# 如果当前字符和下六个字符相同,则跳过下一步
lbu x25, 0(x10)
lbu x26, 6(x10)
beq x25, x26, loop2
# 如果当前字符和下七个字符相同,则跳过下一步
lbu x25, 0(x10)
lbu x26, 7(x10)
beq x25, x26, loop2
# 如果当前字符和下八个字符相同,则跳过下一步
lbu x25, 0(x10)
lbu x26, 8(x10)
beq x25, x26, loop2
# 如果当前字符和下九个字符相同,则跳过下一步
lbu x25, 0(x10)
lbu x26, 9(x10)
beq x25, x26, loop2
# 如果当前字符和倒数第二个字符相同,则跳过下一步
lbu x25, 0(x10)
lbu x26, x16(x10)
beq x25, x26, loop2
# 如果当前字符和倒数第三个字符相同,则跳过下一步
lbu x25, 0(x10)
lbu x26, x17(x10)
beq x25, x26, loop2
# 如果当前字符和倒数第四个字符相同,则跳过下一步
lbu x25, 0(x10)
lbu x26, x18(x10)
beq x25, x26, loop2
# 如果当前字符和倒数第五个字符相同,则跳过下一步
lbu x25, 0(x10)
lbu x26, x19(x10)
beq x25, x26, loop2
# 如果当前字符和倒数第六个字符相同,则跳过下一步
lbu x25, 0(x10)
lbu x26, x20(x10)
beq x25, x26, loop2
# 如果当前字符和倒数第七个字符相同,则跳过下一步
lbu x25, 0(x10)
lbu x26, x21(x10)
beq x25, x26, loop2
# 如果当前字符和倒数第八个字符相同,则跳过下一步
lbu x25, 0(x10)
lbu x26, x22(x10)
beq x25, x26, loop2
# 如果当前字符和倒数第九个字符相同,则跳过下一步
lbu x25, 0(x10)
lbu x26, x23(x10)
beq x25, x26, loop2
# 如果当前字符和倒数第十个字符相同,则跳过下一步
lbu x25, 0(x10)
lbu x26, x24(x10)
beq x25, x26, loop2
# 如果前面所有的判断都失败了,那么当前字符就是最长回文子串的一部分
addi x12, x12, 1 # 最长回文子串长度加1
sub x27, x11, x12 # 计算最长回文子串的开始位置
addi x27, x27, 1
bge x27, x13, loop2 # 如果当前回文子串比之前发现的更长,则跳过下一步
add x13, x11, x12 # 更新最长回文子串的开始位置
addi x27, x27, 1 # 更新最长回文子串的结束位置
loop2:
addi x10, x10, 1 # 将寄存器x10中的地址指向下一个字符
j loop1
end:
li x28, 0x0a # 设置x28为换行符的ASCII码
li x29, 4 # 设置x29为输出整数的系统调用号
li x30, 1 # 设置x30为输出字符的系统调用号
# 输出最长回文子串长度
mv a0, x12
ecall
ecall
# 输出最长回文子串的内容
la x10, str(x13)
li x11, 0
li x12, 0
li x13, 0
li x14, 0
li x15, 10
loop3:
lbu x25, 0(x10)
beq x25, x0, end2 # 如果当前字符是字符串的结尾,则跳转到end2
li a0, 1
mv a1, x25
ecall
addi x10, x10, 1
addi x11, x11, 1
bge x11, x12, end2 # 如果输出的字符数已达到最大值,则跳转到end2
j loop3
end2:
ecall
li x10, 0
j exit
check_palindrome:
# 检查以当前字符为中心的回文子串
# 参数:
# x10: 字符串地址
# x11: 中心字符的下标
# x12: 最长回文子串长度
# x13: 最长回文子串的开始位置
# x14: 最长回文子串的结束位置
# 返回值:
# 无
addi x16, x11, -1 # 用x16存储左边字符的下标
addi x17, x11, 1 # 用x17存储右边字符的下标
li x18, 1 # 用x18存储当前回文子串的长度
loop4:
blt x16, 0, end3 # 如果已经到达字符串的左端,则跳出循环
lbu x25, 0(x10)
lbu x26, x16(x10)
bne x25, x26, end3 # 如果当前字符和左边字符不同,则跳出循环
addi x16, x16, -1
addi x18, x18, 2 # 回文子串长度加2
loop5:
bge x17, x15, end3 # 如果已经到达字符串的右端,则跳出循环
lbu x25, 0(x10)
lbu x26, x17(x10)
bne x25, x26, end3 # 如果当前字符和右边字符不同,则跳出循环
addi x17, x17, 1
addi x18, x18, 2 # 回文子串长度加2
bge x18, x12, end3 # 如果当前回文子串比之前发现的更短,则跳出循环
# 更新最长回文子串的长度和位置
addi x12, x18, 0
sub x13, x11, x18
addi x13, x13, 1
add x14, x11, x18
end3:
ret
```
该程序使用了一个名为 `check_palindrome` 的子程序来检查以当前字符为中心的回文子串。主程序使用两个循环来枚举每个字符作为回文子串的中心,并在每次循环中调用 `check_palindrome` 子程序来检查以当前字符为中心的回文子串。如果找到的回文子串比之前发现的更长,则更新最长回文子串的长度和位置。最后,程序通过系统调用输出最长回文子串的长度和内容。
相关推荐
![pcblib](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)