Simulator.py

김민주·2025년 4월 4일

GK

목록 보기
2/15

최종 목표 : 공공기관 (나라장터) 입찰 + 투찰 + 개찰 + 낙찰

<흐름>
1. 입찰 참여 기업 정보 제출

  • 모든 참여 기업의 정보가 초기에 제출되어 자격과 기본 사항 확인
    => players_info.py
  1. 예비가격 선정 및 에정가격 산출 (투찰 단계의 시작)
  • 과거 데이터, 시장 조사 -> 예비 가격 선정 -> 예정 가격 산출
  • 예정 가격에 투찰률을 곱해 실제 제안될 최소공사비를 산정
    => projected_price.py
  1. 사업수행능력 평가 및 입찰 참여 자격 확정
  • 각 기업의 사업수행능력을 평가(PQ) (적격 심사 포함) -> 입찰 자격 부여
    => bid_clac.py + bid_simulation.py
  1. 실제 입찰
  • 자격이 확정된 업체들이 최종적으로 입찰에 참여 + 경쟁
  1. 개찰
  • 제출된 자료들을 공개적으로 개봉하여, 평가 기준에 따라 서류 및 제안 내용, 가격 등을 종합적으로 검토
  • 투찰 단계에서 산출된 예정가격 및 최소공사비, 그리고 사업수행능력 평가 결과 등이 모두 고려됨
    => bid_simulation의 결과 + bid_graph.py
  1. 낙찰 결정
  • 개찰 결과에 따라 최종적으로 가장 경쟁력 있는 제안(경제성과 기술,수행 능력을 종합적으로 반영한 제안)을 한 업체가 낙찰자로 선정됨

1️⃣<simulator.py>

최종모듈 : 투찰을 위한 시뮬레이션

  • 모듈을 import하여 최종적으로 시뮬레이션하는 최종 모듈의 상태임

2️⃣<pre_data.py>

모듈 사용 목적 : '초기 세팅값 설정' 하여 일관성 유지, 기준 설정, 시뮬레이션 환경 구성

💡 기초 금액(기초 가격) : 발주기관(정부나 공공기관)이 사업의 설계, 원가예산, 거래실례가격 등을 종합하여 산출한 기준 가격
=> BASE_PRICE = 1689000000
💡낙찰 하한율 : 입찰가격 이외의 다른 심사항목의 점수가 만점이라는 가정하에, 적격심사 통과점수를 만족시키는 최저 투찰률

  • 계산방법 : 입찰가격 / 예정가격 X 100%
  • "기초가격"에 일정 비율(보통 80% 내외, 법령이나 발주기관에 가이드라인에 따라 달라짐)
    => BID_LOWER_LIMIT_RATE = 0.79995

3️⃣<players_info.py>

모듈 사용 목적

  • 입찰에 참여하는 기업의 정보를 입력받아 플레이어 객체(딕셔너리) 생성
  • 입력값의 유효성(숫자 범위, 허용된 값)을 검증

4️⃣<projected_price.py>

모듈 사용 목적 : 예비가격 추첨 및 예정가격 결정하는 함수 지원
💡 예비 가격 : '예정가격'을 결정하기 위해 기초금액을 기준으로 산정범위 내에서 발주처 재무관(계약담당자)이 임의로 작성한 가격
💡 복수 예비 가격 : 여러개의 예비 가격을 설정해 두어 상황에 따라 다른 기준 가격이 적용될 수 있도록 하는 방식

  • 기초 금액의 일정 범위 내에서 임의로 산출한 서로 다른 15개의 예비가격
    • 국가계약법 적용 기관 : ±2%
    • 지방계약법 적용 기관 : ±3% -> type = 2 or 3으로 설정된 것

💡예정가격 : 복수 예비가격 중 입찰업체들이 가장 많이 추첨한 4개의 평균금액
💡투찰률 : 예정가격을 기준으로 내가 투찰한 금액의 비율 ( = 입찰가 / 예정 가격 x 100% )

  • 낙찰하한가 보다 높은 가격 중 가격 경쟁력을 평가하는 척도

5️⃣<bid_calc.py>

모듈 사용 목적 : 투찰에 필요한 여러 연산을 지원

  • PQ 점수 계산, 목표 가격 점수, 투찰가에 따른 가격 점수, 낙찰 하한가 등을 계산하는 함수 포함

💡사업수행능력평가(PQ)

  • 입찰에 참가하고자 하는 자에 대하여 유사실적, 기술능력, 경영상태 등을 종합적으로 평가하여 이행능력이 있다고 인정될 경우 입찰참가자격을 부여하는 제도

PQ value와 PQ score를 따로 사용하는 이유?

  • 전체 평가(PQ value) = 사업수행능력 70점 (PQ score) + 가격 평가 30점
  • PQ score는 70점 만점에 맞게 계산된 값 => 가격 평점 = 전체 목표 점수(target score) - PQ score 으로 계산하게됨

💡낙찰하한가 = 기초가격 x 낙찰하한율

  • 입찰 참가자가 제출하는 입찰 가격 중, 최소 허용 가격 이하인 가격을 평가 대상에서 제외하기 위한 기준 가격

<새롭게 알게 된 점>

def pq_score_calc(pq_value, valance=0):
    """
    100점 만점의 PQ value를 전달받고 70점 만점의 PQ score를 반환합니다.
    pq_value : 사업수행 변환 전 점수(PQ점수)
    valance : 변동 가능성이 있는 점수를 반영하고 싶은 경우, 양수/음수 값을 입력하세요.
    """
    for var_name, value in {"pq_value": pq_value, "valance": valance}.items():
        if not isinstance(value, (int, float)):  # 입력값이 int 또는 float인지 확인
            raise TypeError(f"입력 값 '{var_name}'는 int 또는 float여야 합니다. 현재 타입: {type(value)}")

    #경력점수 + 상태점수 3점은 모든 플레이어가 부여받습니다.
    add_score = 3

    #계산된 값을 넣고 소수점 4자리 이상만 반올림하여 반환합니다.
    return round((pq_value + valance)*0.67 + add_score, 4)
  • 0.67을 사용한 이유?
    add_score = 3을 부여받기 때문에 , 만점(70점)이 되려면 (pq_value + valance)가 67점이 되야하기 때문에 x 0.67을 함

6️⃣<bid_simulation.py>

모듈 사용 목적 : 투찰에 따른 여러 시뮬레이션 결과를 지원

  • 단독 투찰 시뮬레이션
  • 경쟁 투자 시뮬레이션
  • 반복하여 투찰 시뮬레이션을 진행하여 각 투찰가에 대한 일정 확률 분포를 산출하는 것

7️⃣<bid_graph.py>

모듈 사용 목적 : 시뮬레이션 결과 data를 입력받아 시각화 -> 그래프 생성(히스토그램, 정규분포 곡선, 확률 변화 그래프 등)


<헷갈렸던 부분>
1. Target score = 가격 평점인지
결론 : x
Target score = PQ_SCORE + 가격 평점
EX) 현재 코드에서 92점이 Target score임

  • 우리가 투찰에 참여하기 위해 맞춰야할 최소 점수

<질문>
1. price_clac 내부의 def price_score_calc에서 0.88이라는 숫자는 어디서 온건지?

  • 전에 데이터를 기반으로 나온것인지?
  • 정확한 역할은 무엇인지 ?
def price_score_calc(bid_price, projected_price, base=pre_data.BASE_PRICE):
    """
    투찰가격과 예가(율)에 따른 가격 점수를 계산하여 반환합니다.
    bid_price : 투찰가를 입력하세요.
    projected_rate : 결정된 예가(율)을 입력하세요.
    base : 사업의 기초가격을 입력하세요.
    """
    return 30 - (( 0.88 - round(bid_price/(projected_price*base), 4) ) * 100)
  1. 투찰률과 낙찰하한율의 계산 방법이 입찰가격 / 예정가격 x 100%으로 같던데 투찰률과 낙찰하한율을 여기서는 같은 개념으로 사용하는지 다른 개념으로 사용하는지 ?
    -> 인터넷에서 찾아봤을 때는 같은 거라고 하고,
    gpt한테 물어봤을 때는 다른 개념이라고 했음(맥락과 적용시점에 따라 구분됨)

  2. players_info에서 전략에 들어갈 수 있는 값들의미가 정확히 무엇인지, 어떤 전략인지는 코드에 안나와있는거 같은데, 어디에 쓰이는지 ?

# 특정 값만 허용하는 키와 허용 가능한 값들
    allowed_values = {
        "strategy": ["random",
"limit_risk_optimization",                  "check_first_optimization",                "third_position_optimization",            "check_second_optimization",
"check_third_optimization",
"first_rank_optimization"]
    }

<구체적인 흐름>

1. 입찰 참여 기업 정보 제출

목적:

참여 기업들의 기본 자격, 재무상태, 과거 실적 등 기초 정보를 파악합니다.

활동:

기업들은 미리 정해진 양식에 따라 서류를 제출하며, 이 정보는 후속 단계(예비가격 산출, 적격 심사 등)에서 참고됩니다.

2. 예비가격 선정 및 예정가격 산출 (투찰 단계의 시작)

예비가격 선정:

과거 유사 사업의 실제 공사비, 시장 조사, 현장 조건 등 여러 데이터를 분석하여 예비가격을 산출합니다.

이 단계에서는 객관적 데이터를 통해 기본적인 비용 범위가 설정됩니다.

예정가격 산출:

산출된 예비가격을 바탕으로, 구체적인 사업 규모와 특성을 반영하여 공식적인 예정가격이 결정됩니다.

예정가격은 이후 경제적 평가의 기준 점수가 되며, 각 입찰자가 가격 경쟁력을 제시할 기준이 됩니다.

투찰률 적용의 위치 및 역할:

투찰률은 예정가격에 직접 적용되는 비율(예, 95%, 90% 등)입니다.

각 업체는 예정가격 대비 얼마의 비율로 가격을 제시할지를 결정합니다.

예를 들어, 예정가격이 100억 원인 경우, 95%의 투찰률을 적용하면 제안 가격은 95억 원이 됩니다.

이때 각 업체가 제시하는 투찰률은 그들의 가격 경쟁력 및 리스크 감수 정도를 반영합니다.

낙찰 하한가의 산출:

입찰 시, 예정가격에 특정 투찰률(최소 투찰률 또는 기준 투찰률)이 곱해져 낙찰 하한가(최소공사비)가 결정됩니다.

이 하한가는 업체가 지나치게 낮은 가격을 제시하는 것을 방지하기 위한 안전장치로 작용합니다.

즉, 현장에서 “예정가격 * 최소 투찰률”이 낙찰 하한가로 산출되어, 입찰 가격이 이 하한가보다 낮을 경우에는 감점 또는 실격될 수 있는 기준이 됩니다.

3. 사업수행능력 평가 및 적격 심사 (PQ)

목적:

단순히 가격 경쟁력만 따지는 것이 아니라, 업체가 사업을 성공적으로 수행할 수 있는 기술력, 조직 역량, 과거 실적 등을 평가합니다.

활동:

제출된 기업 정보와 추가 서류를 통해 각 업체의 사업수행능력(PQ)를 평가합니다.

이 평가 결과에 따라, 실제 입찰 참여가 가능한 적격 업체 목록이 확정됩니다.

만약 평가 기준을 충족하지 못하는 업체는 입찰 참여에서 제외됩니다.

4. 실제 입찰 단계

목적:

적격 심사를 통과한 업체들이 최종 제안서를 제출하여 경쟁합니다.

활동:

각 업체는 자신들이 결정한 투찰률에 따라, 예정가격에 비례한 제안 가격(또는 할인율)을 반영하여 가격을 제출합니다.

동시에 기술, 실행 계획, 관리 체계 등 종합적인 제안 내용을 함께 제출합니다.

제출된 제안은 경제적 평가(즉, 투찰률에 따른 가격 제안)와 기술 및 사업수행능력 평가가 모두 고려됩니다.

5. 개찰

목적:

제출된 제안서를 공개적으로 개봉하고, 평가 기준에 따라 모든 서류와 제안 내용을 종합 평가합니다.

활동:

개찰 과정에서는 각 제안서가 예정가격 대비 어느 정도의 투찰률을 적용했는지, 즉 낙찰 하한가와 비교하여 평가됩니다.

또한, 개찰 시에는 사업수행능력 평가 결과도 함께 반영되어 경제성과 기술적 완성도를 종합적으로 검토합니다.

이때, 제안된 가격이 “예정가격 * 최소 투찰률” (낙찰 하한가) 이상인지가 중요한 평가 요소로 작용합니다.

6. 낙찰 결정

목적:

개찰 결과, 가장 경제적이면서도 기술 및 사업수행능력 평가 기준을 만족하는 업체를 선정합니다.

활동:

평가 점수를 종합하여 최종 낙찰자를 결정합니다.

낙찰 결정 시, 제출한 투찰률(즉, 제시 가격)이 예정가격과 비교하여 경제적으로 경쟁력 있는지, 그리고 낙찰 하한가 이상의 가격 제시여부를 반드시 고려합니다.

최종 선정된 업체와는 이후 계약 체결을 진행하게 됩니다.

전체 과정의 핵심 정리 및 세분화 포인트
초기 단계:

입찰 참여 기업 정보 제출 → 기업의 기초 정보가 접수되어 적격 심사의 기초 자료로 활용됨.

투찰(경제적 평가) 단계:

예비가격 선정: 과거 자료와 시장 조사로 예비가격 결정.

예정가격 산출: 사업의 규모와 조건 반영하여 최종 예정가격 결정.

투찰률 적용: 각 업체가 예정가격에 적용할 비율을 결정하며, 이로부터 실제 제안 가격 및 낙찰 하한가(최소공사비)가 산출됨.

예시: 예정가격 100억 원 × 투찰률 95% = 95억 원 → 이 값이 낙찰 하한가의 기준 역할.

사업수행능력 평가 및 적격 심사(PQ):

업체들의 기술, 과거 실적, 조직 역량 등을 평가하여 입찰 참여 자격을 확정함.

실제 입찰과 개찰:

적격 업체들이 최종 입찰에 참여하며, 제출 가격이 낙찰 하한가 이상이면서 기술, 실행 계획 등의 평가 기준을 만족하는지를 공개 개찰을 통해 검토.

최종 낙찰 결정:

경제적 제안(투찰률 적용에 따른 가격)과 사업수행능력 등의 종합 평가 결과로 가장 경쟁력 있는 업체 선정.

0개의 댓글