DMOZ中文网站分类目录-免费收录各类优秀网站的中文网站目录.
  • DmozDir.org
DMOZ目录快速登录入口-免费收录各类优秀网站的中文网站目录.由人工编辑,并提供网站分类目录检索及地区分类目录检索,是站长免费推广网站的有力平台!

CCF

  • CCF

  • 已被浏览: 32 次2020年12月31日    来源:  https://blog.csdn.net/qq_30803353/article/details/110942607
  • 擅长大数据挖掘、机器学习和深度学习擅长Java、Python、Javascript等编程语言在金融、交通、工业等方向有丰富的项目经验2020年“深圳杯”数学建模挑战赛D题-公交车在高峰和平峰转换期间的调度20977 2020年“深圳杯

    背景
    期货市场上的货物卖方和货物的买方期望通过期货市场进行货物买卖,达到买卖双方钱货交换的目的(买方从卖方获取货物并向卖方支付对应货款)。

    数据说明
    1)货物数量均为正整数,且所有买方购买货物数量总和等于所有卖方公布的货物数量总和。
    2)货物编号为货物的唯一编号,不同卖方客户可持有相同货物编号的货物,其可拆分分配给不同的买方客户,但拆分后的数量也必须为正整数,其货物编号也保持不变;同一买方客户从相同卖方客户获得的同一货物编号的货物应按货物编号对数量进行合并。
    3)每个客户在每个品种上最多有一条购买货物意向,一条意向中,不同优先级的意向维度不能相同。

    解题思路
    1、以买方为主体,遍历buyer数据(也可以卖方为主体,倒过来也可以试试)
    2、根据买家的五个意向找到相应的卖家
    3、按顺序遍历相应的卖家数据,如果品种相同就进行交易
    4、如果卖家卖完了,删掉此卖家;如果买家买完了,卖家的货物数量减掉买家买完的

    代码如下,每天持续更新,请持续关注

    # encoding:utf-8
    import os
    
    '''
    1)货物数量均为正整数,且所有买方购买货物数量总和等于所有卖方公布的货物数量总和。
    2)货物编号为货物的唯一编号,不同卖方客户可持有相同货物编号的货物,
    其可拆分分配给不同的买方客户,但拆分后的数量也必须为正整数,其货物编号也保持不变;
    同一买方客户从相同卖方客户获得的同一货物编号的货物应按货物编号对数量进行合并。
    3)每个客户在每个品种上最多有一条购买货物意向,一条意向中,不同优先级的意向维度不能相同。
    
    输出结果应包括买方客户、卖方客户、品种、货物编号、仓库、分配货物数量、
    对应意向顺序(对应多个则填写对应意向顺序,以“-”分割)。
    如果该匹配条目不对应任何意向,或者客户未提任何意向,则“对应意向顺序”列填0 。
    '''
    import pandas as pd
    import csv
    
    os.chdir(r'E:\项目文件\CCF\基于买方意向的货物撮合交易')
    
    
    def writeOneCsv(relate_record, src):
        with open(src, 'a', newline='\n') as csvFile:
            writer = csv.writer(csvFile)
            writer.writerow(relate_record)
    
    
    buyer = pd.read_csv('buyer.csv', encoding='gbk', dtype=str)
    result = pd.read_csv('result.csv', encoding='gbk', dtype=str)
    seller = pd.read_csv('seller.csv', encoding='gbk', dtype=str)
    # 用于记录已卖掉的id
    selled = []
    
    for one in buyer.itertuples():
        buyer1 = getattr(one, '买方客户')
        buy_num = getattr(one, '购买货物数量')
        brand = getattr(one, '品种')
        first = getattr(one, '第一意向')
        first1 = getattr(one, '值1')
        second = getattr(one, '第二意向')
        second2 = getattr(one, '值2')
        third = getattr(one, '第三意向')
        third3 = getattr(one, '值3')
        forth = getattr(one, '第四意向')
        forth4 = getattr(one, '值4')
        fifth = getattr(one, '第五意向')
        fifth5 = getattr(one, '值5')
        yx = '1'
        data = pd.DataFrame()
        if isinstance(fifth, str):
            data = seller[(seller[first] == first1) & (seller[second] == second2) & (seller[third] == third3) &
                          (seller[forth] == forth4) & (seller[fifth] == fifth5)]
            yx = '1-2-3-4-5'
        elif isinstance(forth, str):
            data = seller[(seller[first] == first1) & (seller[second] == second2) & (seller[third] == third3) &
                          (seller[forth] == forth4)]
            yx = '1-2-3-4'
        elif isinstance(third, str):
            data = seller[(seller[first] == first1) & (seller[second] == second2) & (seller[third] == third3)]
            yx = '1-2-3'
        elif isinstance(second, str):
            data = seller[(seller[first] == first1) & (seller[second] == second2)]
            yx = '1-2'
        elif isinstance(first, str):
            data = seller[(seller[first] == first1)]
        else:
            # 只买SR的情况
            data = seller[(seller['品种'] == 'SR')]
            yx = '0'
        for index, row in data.iterrows():
            id = getattr(row, 'id')
            if not id in selled:
                brand1 = getattr(row, '品种')
                seller1 = getattr(row, '卖方客户')
                goods_id = getattr(row, '货物编号')
                sell_num = getattr(row, '货物数量(张)')
                cart = getattr(row, '仓库')
                brand2 = getattr(row, '品牌')
                location = getattr(row, '产地')
                year = getattr(row, '年度')
                level = getattr(row, '等级')
                cat = getattr(row, '类别')
                if brand == brand1:
                    sy_num = int(buy_num) - int(sell_num)
                    if sy_num > 0:
                        print('卖家卖完了,买家还要买')
                        finish = [buyer1, seller1, brand, goods_id, cart, sell_num, yx]
                        writeOneCsv(finish, 'new1212.csv')
                        print(finish)
                        selled.append(id)
                        seller = seller.drop([int(id)])
                    else:
                        finish = [buyer1, seller1, brand, goods_id, cart, buy_num, yx]
                        writeOneCsv(finish, 'new1212.csv')
                        print('买家买完了,卖家还有剩')
                        print(finish)
                        seller.iloc[int(id), 4] = int(sell_num) - int(buy_num)
                    break
    
    

    可以试试的算法或软件:

    1. 遗传算法
      遗传算法 求解旅行商 TSP 问题,matlab代码
      python实现遗传算法(旅行商问题)

    2. cplex强行搜索
      使用CPlex CP求解约束规划问题

    3. gurobi
      Gurobi 求解简单约束规划

    4. lingo
      最小匹配算法的lingo程序

    AI信仰者 数据挖掘专家 机器学习专家 AI领军人物 擅长大数据挖掘、机器学习和深度学习
    擅长Java、Python、Javascript等编程语言
    在金融、交通、工业等方向有丰富的项目经验
    以上信息来源于网络,如有侵权,请联系站长删除。

    TAG:CCF

  • 上一篇:谷歌地图文档翻译【一、Overview】
  • 与“CCF”相关的资讯
  • CCF CSP 历年试题题解
  • CCF
  • CCF