(24.03) AI로 반발경도 추정압축강도계산 프로그램 만들기 – 1

<(24.03) AI로 반발경도 추정압축강도계산 프로그램 만들기 – 1>

이번에는 좀 쌩뚱맞은 주제를 들고왔습니다. 현장에서 비파괴시험을 하다보면

이런 궁금증이 생길때가 많습니다

“그래서 지금 이게 강도가 몇 MPa 정도 되는거지?”

이게 무슨소리냐 하실법 하지만 압축강도 시험을 하고 저희가 체크하게 되는 숫자는

반발값만 알 수 있기때문에 정확한 강도값으로서는 사무실에 돌아와서 계산을 거쳐야하는

번거로움이 다소 있습니다.

<콘크리트 압축강도에 대한 내용>

그리고 콘크리트의 단단하기를 측정하는 압축강도시험의 경우 가장 기초가 되는 내용이지만

대부분의 베테랑 안전진단 기술자 분들은 이 결과를 검토하는 입장이지

결과를 분석하는 입장이 아니게 되다 보니 결국 초급 기술자 입장에서는

처음에 제대로 알지 못하면 계속해서 잘못된 방법으로 강도를 산정하기 마련이다

타격각도라던가 표면의 습윤 건조상태와 같은 여러가지 상황도 있거니와

설계기준강도 대비 어느정도를 만족해야 하는것인지 뭐 이런 내용들에 대한

개인의 깊이있는 고민은 많이 없어지고 매너리즘에 빠지기 쉬운것 같다

내가 그랬어서 그랬던거같은데….

예전부터 이런 비파괴 시험관련 내용에 대한 프로그램화를 꿈꾸긴 했으나

나에게는 그런 능력이 없었다

물론 지금도 없지만 대신 요즘 세상이 좋아져 Chat GPT라고 하는 유능한 동료가 생겼다

덕분에 파이썬을 기반으로 하는 코딩과 자연어로 명령하는 방식의 프로그램이

유튜브나 인터넷을 파고들어 가능해진 세상이 드디어 도래했다!

<Chat GPT 업무활용 방법>

좋은 기술이 있다면 당연히 적극 활용해야 하는법

이 내용들은 내가 프로그램을 만드는 방법을 여러분들에게 전달하고자 하는 내용보다는

이렇게 만들어가는 과정을 보여드리기 위한 진짜 블로그의 목적과 굉장히 흡사하다

AI로 반발경도 추정압축강도계산

GPT에게 파이썬 기반의 코딩요청

시작하는 내용은 어렵지 않다

역할을 부여하고 그에따른 코드를 뱉어내 달라고 하면 되는것인데

일전에 GPT관련 팁 내용에서도 여러번 드렸던 말씀이지만 기본적으로 한번에

원하는 결과를 얻는건 거의 불가능하다고 생각하시면 된다

계속해서 예시를 주고 텍스트로 대화하고 그리고 피드백을 주고 수정해나가야한다

부가적으로 반복해서 보다보니 바둑 기보를 보는것처럼 조금씩 코딩에 대한 이해가 늘긴 했지만

그렇다고 코딩에 대해서 심도있는 이해가 있는것은 아니다

(24.03) AI로 반발경도 추정압축강도계산 프로그램 만들기 - 1
잘부탁한다 피티야

Ro값을 입력하여 산출공식에 대입

현장에서 얻은 20회의 반복값을 입력하여 평균 Ro값에 산출공식을 대입하는 방식으로

값을 계산하곤 하지만, 최근에는 장비들이 좋아져 20회 이상 타격하면 알아서

Ro 값이 산출되곤 한다

하지만 대부분의 보고서나 비파괴 시험 시트같은 경우에는 20회의 반발값을 입력하는 경우도 있다

그런부분은 자투리로 남겨두고

먼저 요청한것은 특정한 값을 입력하였을때 이 결과를 일정한 공식에 대입하는것부터 시작했다

(24.03) AI로 반발경도 추정압축강도계산 프로그램 만들기 - 1
(24.03) AI로 반발경도 추정압축강도계산 프로그램 만들기 - 1
이렇게 문법 틀리는 일 없이 코드를 짜준다

간략하게 설명하자면 Ro 평균값을 입력하면 해당공식에 입력하여 값을 내보내는

아주 평범한 함수와도 같은 내용이다.

20회의 타격값의 평균만 나타낸다면 의미가 없다 이제 계속해서 나아가보자

일반적으로 공식은 일본재료학회식, 일본건축학회식을 자주 사용하므로

AI로 반발경도 추정압축강도계산에는 이번에 두개의 식만 포함하기로 하고

추후 좀더 정밀하게 만들어나가는 과정으로 나아가고자 한다

식을 한개 더 추가해보도록 하자

(24.03) AI로 반발경도 추정압축강도계산 프로그램 만들기 - 1
(24.03) AI로 반발경도 추정압축강도계산 프로그램 만들기 - 1
생성된 결과

반발경도 평균값을 입력하여 각 식에 대입해주는 방법까지는 손쉽게 왔다

참고로 이 코드들을 실행해보시고 싶다면 굳이 파이썬을 설치 하지 않으셔도

구글 코랩이라는 것이 있으니 반드시 사용해보시길 바란다

<구글 코랩>

재령보정계수 넣기

추정압축강도를 산출할때

시간이 지나면서 강도가 떨어진다는 개념이 있다

그것을 재령 보정 계수라고 하는 개념이 있다 단어가 어렵긴 한데 그냥

시간이 지나면 이정도는 강도를 감소해서 추정해야한다는 개념이다

특징으로는 100일부터 3000일까지의 강도감소 값이 어느정도 정해져있기때문에

선형으로 특정하고 재령보정계수를 산출 한 뒤 최종 계산식에서 반환된 값에 곱해지는식으로

설계를 했다

(24.03) AI로 반발경도 추정압축강도계산 프로그램 만들기 - 1
(24.03) AI로 반발경도 추정압축강도계산 프로그램 만들기 - 1

역시 AI만큼 똑똑한 녀석이 없는것 같다

이렇게 AI로 반발경도 추정압축강도계산시에는 정확한 데이터를 입력해주면서

말로 잘 설명해주는것이 핵심이다

(24.03) AI로 반발경도 추정압축강도계산 프로그램 만들기 - 1
준공일로부터 현재일까지로 계산한다면 적절

이렇게 날짜를 입력하면 자동으로 재령보정계수가 산출되고 산출된 보정계수는

최종 산출식에 곱해지는 방식으로 코드를 짜줬다

(24.03) AI로 반발경도 추정압축강도계산 프로그램 만들기 - 1

날짜입력이 미국식으로 되어있어서 한국식으로 쉽게 입력할 수 있도록

날짜입력 방식도 바꿔주고 자동으로 오늘 날짜까지의 재령일수를 넣어주도록 수정했다

*추후 계산날짜도 넣을수 있으면 좋을것 같다

타격각도보정

(24.03) AI로 반발경도 추정압축강도계산 프로그램 만들기 - 1

타격 각도에 따라서 정해진 식에 따라서

강도가 증가하거나 감소하는것인데

중력방향에 따라서 아무래도 반발되서 회복되는 속도의 차이가 있기 때문이다

(24.03) AI로 반발경도 추정압축강도계산 프로그램 만들기 - 1

이미 이건 식이 있기때문에 식을 입력해주고 타격각도에 대해서 설명만 해주면 된다

(24.03) AI로 반발경도 추정압축강도계산 프로그램 만들기 - 1
입력이 아주 쉽다

뭐 어려울게 없다 그냥 이렇게 타격각도식을 입력해주고 포함해달라고 하면 된다

AI로 반발경도 추정압축강도계산 중간완료

(24.03) AI로 반발경도 추정압축강도계산 프로그램 만들기 - 1

일단 얘가 제대로 이해했는지 “위의식에 Ro 값을 40 입력하면 얼마 나오냐고” 물어봤다

잘 이해한거 같으니 이제 이걸 구글 코랩으로 이동해서 값이 잘 나오는지 확인만 해보면 된다

실제 작업중간에는 계속해서 입력하면서 확인했었다

AI로 반발경도 추정압축강도계산 프로그램 만들기
날짜를 입력하니 재령보정계수는 제대로 산출된다
AI로 반발경도 추정압축강도계산 프로그램 만들기
Ro 값은 40을 입력하고 시험위치는 슬래브라고 써보자
AI로 반발경도 추정압축강도계산 프로그램 만들기
추후 타격각도에 대한 설명을 포함하거나 위 아래로 넣을수있도록 하자
AI로 반발경도 추정압축강도계산 프로그램 만들기
타각보정계수도 잘 계산된듯하다

일반적으로 사용하는 엑셀시트값이랑 비교해보니 값이 잘 나온것으로 확인됐다

이걸이게 기본골자로 삼아서 시험위치, 건조 습윤상태와 설계기준강도 대비 강도비와

그리고 설계기준강도대비 강도비에 따라서 자동으로 출력되는 문구까지 해서

재료시험 반발경도편을 완성하게 해주는 도구로 성장하는게 목표다

업무중에 조금씩 하는것이라 얼마나 빨리 완성될지는 모르겠지만

꽤나 원대한 포부가 있기 때문에 완성해서 배포까지 힘내보도록 하겠다

AI로 반발경도 추정압축강도계산 이후에는 탄산화까지 까지 가는 길이 필요할것 같은데

오늘은 여기까지 마무리하도록 하겠다

사용된 코드는 아래에다가 적어둘테니 참고하시면 좋겠다

<사용된 코드>

import random
from datetime import datetime

def calculate_adjustment_factor(days_since_input):
    if days_since_input <= 0:
        return 1
    elif days_since_input <= 100:
        return 1 - days_since_input * 0.0005
    elif days_since_input <= 300:
        return 0.78 - (days_since_input - 100) * 0.00008
    elif days_since_input <= 500:
        return 0.7 - (days_since_input - 300) * 0.00006
    elif days_since_input <= 1000:
        return 0.67 - (days_since_input - 500) * 0.00002
    elif days_since_input <= 3000:
        return 0.65 - (days_since_input - 1000) * 0.00002
    else:
        return 0.63

def calculate_impact_angle_correction(impact_angle, Ro):
    return impact_angle / 90 * (25.3 + (0.08 * (Ro - 30)) - 30)

def main():
    # 사용자로부터 날짜 입력 받기
    input_date_str = input("날짜를 입력하세요 (YYYYMMDD 형식): ")
    input_date_obj = datetime.strptime(input_date_str, "%Y%m%d")
    # 현재 날짜 계산
    current_date = datetime.now()
    # 날짜 차이 계산
    days_since_input = (current_date - input_date_obj).days
    
    # 재령보정계수 값 계산
    adjustment_factor = calculate_adjustment_factor(days_since_input)
       
    # 결과 출력
    print("날짜 입력:", input_date_str)
    print("재령보정계수:", round(adjustment_factor, 2))

    # 사용자로부터 Ro 값 입력 받기
    Ro = float(input("Ro값을 입력하세요: "))
    
    # 사용자로부터 부재의 시험위치 입력 받기
    item_name = input("부재의 시험위치를 입력하세요: ")

    # 사용자로부터 타격각도 입력 받기
    impact_angle = float(input("타격각도를 입력하세요: "))

    # 타각보정계수 계산
    angle_correction = calculate_impact_angle_correction(impact_angle, Ro)
    
    # 입력된 값에 대한 식 계산
    calculated_value_1 = -18.0 + (1.27 * Ro)
    calculated_value_2 = ((7.3 * Ro) + 100.0) * 0.098
    
    # 결과 값에 재령보정계수 적용
    adjusted_calculated_value_1 = round(calculated_value_1 * adjustment_factor, 2)
    adjusted_calculated_value_2 = round(calculated_value_2 * adjustment_factor, 2)
    
    # 랜덤 숫자 생성을 위한 리스트
    random_numbers = []
    
    # 20개의 랜덤 숫자 생성
    for _ in range(20):
        # 입력된 Ro 값의 10% 범위 내에서 랜덤한 숫자 생성
        random_number = random.uniform(Ro * 0.9, Ro * 1.1)
        random_numbers.append(round(random_number, 1))
    
    # 결과 출력
    print("Ro 값:", Ro)
    print("항목 이름:", item_name)
    print("타격각도:", impact_angle)
    print("타격각도 보정계수:", round(angle_correction, 2))
    print("입력된 값에 대한 일본재료학회 결과값:", round(calculated_value_1, 2),"MPa")
    print("입력된 값에 대한 일본재료학회 추정압축강도:", adjusted_calculated_value_1, "MPa")
    print("입력된 값에 대한 일본건축학회 결과값:", round(calculated_value_2, 2),"MPa")
    print("입력된 값에 대한 일본건축학회 추정압축강도:", adjusted_calculated_value_2, "MPa")
    print("생성된 랜덤 숫자들:", random_numbers)

if __name__ == "__main__":
    main()