基于CommonKADS方法论实现知识库系统

说明:本文是Knowledge-based systems with thecommonKADS method文章的翻译。

一、知识库系统的背景

1. 什么是知识库系统(KBS)

知识库系统是人工智能的一个分支,可以真正地应用于现今的系统开发领域。他们通常内嵌于其他的应用中,来执行特定知识的任务。

知识库系统是AI科学家长期研究的成果。从上个世纪70年代开始,科学家们开始理解计算机程序解决问题的关键不在于规整的表达式或者推理逻辑的模式,而是在于这些问题本身拥有的知识。拥有丰富知识和经验的人类专家可以高效地解决不同种类的问题----即使他们对这些问题的描述并不是十分明确----只要是这些问题处于专家的研究领域。因此,知识库系统是一组计算机程序,用来仿真(在某些情况下甚至超越)人类专家解决问题的能力。当然,知识库系统的目标并不是用机器来代替人类的思考,而是发挥出计算机强大的计算能力。为了打造一个知识库系统,工程师们需要接受来自专家的大量的建议。在一些领域,这些专家都是基于规则进行建议的,尽管他们自身并没有意识到这一点。

知识库系统在不基于直觉或者常识而获得有效的结果方面是非常强大的。

知识库系统的发展过程经历了两代:在第一代系统中,工程师们局限于根据专家定义的规则进行编码实现,这种形式并不是十分有效的,因为项目难以维护并且修改代价十分巨大。除此之外,知识获取的过程严重依赖专家的输出;在第二代系统中,Allen Newel提出了‘知识等级’的概念,知识不依赖于具体的实现,而是根据不同种类的知识等级进行结构化表示:

l  知识等级:Agent,Knowledge,Goal,Actions

l  表示等级:Computer,Symbols,Instructions

l  逻辑等级:Digital System,Bits,Logic and Arithmetic Operations

l  链路等级:Electronic System, Current

Newel提出了使用模型的必要性,这样,我们把‘知识获取’定义成一个过程,在这个过程中,工程师们先创建‘知识模型’,随后把它们编码成计算机可运行的形式。

现在通常使用第二代知识库系统。

2. 编程语言

知识库系统通常基于Prolog,Lisp,C++和CLIPS语言来实现,其中CLIPS是本文介绍的重点。Lisp是一种函数式编程语言,一直以来都应用于AI领域并且取得了不错的效果。与此相对,Prolog是一种声明式语言,与面向过程的编程语言通过实现一个算法来解决问题的模式不同,它通过推理引擎来论证事实和关系。过程式语言面向‘How’,声明式语言面向‘What’。另外,C++是一种非常高效并且高度优化的编程语言,但是它缺少推理引擎,需要从零开始实现。

3. 应用领域

  • Support system decision-making:给定一个问题,系统根据系统内已有的知识决策出最优的方案。
  • Configuration:在一个特定的过程中选择和计划可能需要的组件。例如,从给定的组件和需求开始,系统帮助配置物理装备。
  • Diagnosis:系统根据症状来确定问题的根源,例如,疾病诊断和问题排查。
  • Interpretation and analysis:通过分析、处理大量的信息,给出一个显示的报告并建议采取行动的步骤,其中一个例子就是评估建筑物结构抗震等级。
  • Monitoring:它是Interpretation and analysis的一个经常使用的特殊的案例,所以在这里单独划分开来。它的目标通常是通过监控一个过程来给出控制结果的输出,例如:核电站的控制系统。
  • Planning:通过建立阶段和资源来获取目标输出,其中一个例子就是解决工业物流问题。
  • Intelligence interfaces:通常应用在人们很难去使用复杂装备的情况下,例如自动驾驶。
  • Design:在Computer Aided Design领域给出建议,例如在电子设计程序中给出正确的工作电压。

4. 知识库系统的结构

  • 知识库:KBS以形式化和结构化的方式来存储人类专家的知识,通常称为知识库。一些知识库系统拥有‘元知识’或者‘关于知识的知识’,也就是说他们可以根据不同的情况,采取不同的策略,以智能的方式来搜索知识库并找到问题解决方案。这就意味着在具体实现的过程中,系统会根据定义的标准或者条件来决定使用哪种策略。知识库可以被表示成谓词演算、列表、对象、语义网络和产品规则,大多数情况下,通常基于规则和对象进行实现。
  • 推理引擎:也称为规则解释器,目标是在推理过程中搜索和选择正确的规则。
  • 事实库:它就像一个临时的大内存,来存储在推理过程中使用的用户数据、初始问题、假设条件和临时结果。通过事实库,我们可以洞悉系统当前的状态和它是如果工作的。最好将这些信息存储在关系型数据库中,不要选择其它的持久化方式。
  • 用户接口:允许和KBS进行通信,包括数据的输入和输出。

5. 目前的趋势

知识库系统的开发并没有统一的标准,尽管如此,ESPRIT项目提供了一套方法论来开发知识库系统,简称CADS(Knowledge Acquisition Design System)。在KADS中,构造知识库系统基本上就是一种基于模型的活动,其中一个最重要的特性就是构造一个与具体实现无关的、完备的知识模型。KADS是面向结果的方法论,产品中每个开发活动产生的结果是整个项目控制和方向的唯一检验标准。

二、CommonKADS方法论

1. 历史简介

CommonKADS是KBS工程中领先的方法论,已经被许多公司和高校基于欧洲ESPRIT项目集进行开发和测试过。现在是知识库系统开发的事实标准,并且被欧洲、美国和日本的很多公司所采纳、使用。CommonKADS同时也提供方法来进行知识任务和进程的详细分析,下图展示了知识库系统方法论的演进过程:

CommonKADS起源于KADS-I项目----一个拥有悠久历史和众多技术人员参与的项目----尽管这套方法论缺少形式标准。从1990年冬季开始,一个新的方法论具有商业可行性并且覆盖了KBS整个生命周期,它就是CommonKADS。

2. 模型套件

模型套件在知识工程中提供任务分解,来减少复杂性。当考虑构造一个模型的时候,其他方面可以延后考虑。CommonKADS涉及的模型如下图所示:

  • Organization Model:描述和分析一个公司的主要活动。
  • Task Model:分析一个组织的全局子过程的模式:输入、输出、前置条件、性能标准、资源和能力要求等。
  • Agent Model:任务执行的特征描述:能力要求、授权流程和限制条件等。
  • Communication Model:一个任务中涉及到的Agent事务流的概念性描述。
  • Knowledge Model:一个任务使用的知识类型、结构的描述,或者一个任务解决过程中涉及的知识组件的角色的描述----它们不依赖于具体的实现。
  • Design Model:描述了技术规格,例如架构、实现平台、软件模块等等,目的是得到Knowledge Model和Communication Model中涉及的功能。

在这些模型中,本篇文章将重点关注Knowledge Model,其结构如下图所示。

²  Domain knowledge:描述了关于应用领域的实体和内容,和其他知识类型的使用无关。

²  Inference knowledge:处理不同类型的推理(在任务解决过程中被专家使用的论据)。一个推荐由输入和输出定义----也就是它们的领域角色。推理不允许进一步的分解。

²  Task knowledge:指明了任务的目标以及解决方法。

²  Problem solving methods:描述了任务解决方法,确定递归分解的子任务以及它们的执行顺序。

²  Strategic knowledge:说明了任务执行计划,为了设计更加灵活的系统而加以考量。

3. 角色

和其他的软件项目一样,需要人员来组织、管理和开发知识库系统。在KBS的开发中,一共存在6种相关的角色,如下图所示。

  • Knowledge provider/ specialist:人类知识的拥有者,通常是应用领域内典型的专家,也可以是组织内没有专家头衔的人员。
  • Knowledge engineer/ analyst:知识工程师的一个重要问题就是要找到之前提到的真正的专家,‘知识工程师’的头衔通常专指进行‘系统分析工作’的人员,所以也可以称他们为‘知识分析师’,因此,这两种称呼是等价的。CommonKADS向知识工程师们提供一整套的方法和工具,使得标准任务分析工作简单明了。
  • Knowledge system developer:知识系统开发员主要负责设计和实现,他们必须有数据分析的基本背景知识。在知识系统开发的过程中,主要的知识问题都被知识分析师解决掉了,因此,此角色应该具备软件设计师的一些技能。
  • Knowledge user:主要负责知识系统的使用----直接或者间接地。他们与KBS的交互对于项目开发和验证来说是非常重要的。
  • Project manager:负责项目的管理以及知识工程师和知识系统开发员的管理。
  • Knowledge manager:在整个层级的最上面,在宏观上把握项目,就像一个策略家,协作、定义和分发知识给其他的角色。

三、使用CommonKADS开发KBS

为了理解以上说明的内容,我们开发了一个用来展示专家系统特性的小型的图书辅助应用。此应用的基本想法是根据读者的年龄、受教育程度和兴趣来推荐一本特定的图书。此应用不是真正可应用的系统,但是加以修改可以展示最基本的功能。因此,它可以应用在图书馆或者书店中,来推荐读者应该读什么类型的书籍。

1. 领域知识

描述了一个领域中的内容以及内容之间的关系,内容可以表示成知识领域中的中心实体,我们通过名字来识别内容,包括抽象的实体和具体的实体对象。它很像C++或者Java中的Class的概念。这些内容被表示成他们的属性或者特性,通过类型和名字来识别;属性是知识领域内容的原子表示。领域知识由下面三种元素组成:

1)         类图

我们使用UML语言来定义内容和属性,也可以使用其他AI建模语言,如KIF,Ontolingua等。

完成建模之后,使用CML(CommonKADS Conceptual Modeling Language)语言进行编写代码。

Concept Person;
ATTRIBUTES:
Name: String;
Age: Int;
Stage: String;
Interests: String;
Education: String;
END CONCEPT Person;

Person

CONCEPT Reading-type;
ATTRIBUTES:
Genre: String;
END CONCEPT;

Reading-type

CONCEPT Reader-type;
ATTRIBUTES:
Level: String;
END CONCEPT;

reader-type

CONCEPT Book;
ATTRIBUTES:
Title: String;
Author: String;
END CONCEPT;

book

2)         表达式关系

表达式之间的关系以if…then的形式进行表现:条件表达式在前,赋值表达式在后。我们假设她们之间的一种因果关联关系,本例中展示的关系如下:

RULE-TYPE Abstraction-rules;
DESCRIPTION: Abstract the age of a person
ANTECEDENT: Person;
CARDINALITY: 1;
CONSEQUENT: Stage;
CARDINALITY: 1;
CONNECTION-SYMBOL: Abstracts;
END-RULE-TYPE Abstraction-rules;

Abstraction-rules

RULE-TYPE Genre-preferences;

DESCRIPTION: Genre selection starting from the interests

ANTECEDENT: Interests;

CARDINALITY: 1;

CONSEQUENT: Genre;

CARDINALITY: *;

CONNECTION-SYMBOL: Prefers;

END-RULE-TYPE Genre-preferences;

Genre-preferences

RULE-TYPE Level-assignation;

DESCRIPTION: Assigns a level according the education

ANTECEDENT: Education;

CARDINALITY: 1;

CONSEQUENT: Level;

CARDINALITY: 1;

CONNECTION-SYMBOL: Assigns;

END-RULE-TYPE Level-assignation;

Level-assignation

RULE-TYPE Assign-book;

DESCRIPTION: Assign books

ANTECEDENT: Genre and Level;

CARDINALITY: *;

CONSEQUENT: Book;

CARDINALITY: *;

CONNECTION-SYMBOL: Final assignation;

END-RULE-TYPE Assign-book;

Assign-book

3)         知识库

知识库通过之前定义的通用规则来获取表达式对,下面展示了知识库的一个样本实例:

KNOWLEDGE-BASE Literary-assistant-base

USES

Abstraction-rules FROM literary-assistant-scheme;

Genre-preferences FROM literary-assistant-scheme;

Level-assignation FROM literary-assistant-scheme;

Assign-book FROM literary-assistant-scheme;

EXPRESSIONS

/* Select stage */

Person.age <= 13

ABSTRACT Person.stage = CHILD

Person.age > 13 AND Person.age <= 19

ABSTRACT Person.stage = TEENAGER

Person.age > 19 AND Person.age <= 40

ABSTRACT Person.stage = YOUNG

Person.age > 40

ABSTRACT Person.stage = ADULT

/* Discriminate interests */

Person.interests = "Music" OR Person.interests = "Painting" OR

Person.interests = "Cinema" OR Person.interests = "Sculpture"

PREFER reading-type.genre = ART

.

.

.

/* Adjust reader level */

Person.education = SECONDARY AND Person.stage = YOUNG

SELECT-LEVEL reader-type.level = ADVANCED

Person.education = SECONDARY AND Person.stage = ADULT

SELECT-LEVEL reader-type.level = ADVANCED

Person.education = UNIVERSITARY

SELECT-LEVEL reader-type.level = ADVANCED

.

.

.

/* Science section */

reader-type.level = CHILD AND reading-type.genre = SCIENCE

SELECT-BOOK Book.title = "Arithmetics handouts"

reader-type.level = BASIC AND reading-type.genre = SCIENCE

SELECT-BOOK Book.title = "Basic arithmetics and geometry "

reader-type.level = INTERMEDIATE AND reading-type.genre = SCIENCE

SELECT-BOOK Book.title = "Derivatives and integrals"

reader-type.level = ADVANCED AND reading-type.genre = SCIENCE

SELECT-BOOK Book.title = "Differential equations"

.

.

.

END KNOWLEDGE-BASE Literary-assistant-base;

Literary-assistant-base

2. 推理知识

推理知识是指不需要进行分解的子任务的集合,它们是任务执行过程中的原子论证步骤和元素。通过指明使用的函数以及函数的输入和输出来描述推理知识。需要注意的是,推理的描述并没有暗示它们是如何执行的,因为它们非常依赖特定的应用和领域。

1)         推理模式

就像之前解释的那样,推理是一个基本的论证步骤,但是它依赖于领域角色:

  • 静态角色:在论证步骤中使用的元素,但是这些元素不受论证过程的影响。
  • 动态角色:在论证过程中使用的元素的输入和输出。

INFERENCE Abstract

ROLES

INPUT: Person;

OUTPUT: Stage;

STATIC: Abstraction-model;

SPECIFICATION:

"Abstracts the age of a person"

END INFERENCE Abstract;

Abstract

INFERENCE Select-genre

ROLES

INPUT: Interest;

OUTPUT: Genre;

STATIC: Preferences-model;

SPECIFICATION:

"Selects a genre according the user‘s interests"

END INFERENCE Abstract;

Select-genre

INFERENCE Select-level

ROLES

INPUT: Education,Stage;

OUTPUT: Level;

STATIC: Level-model;

SPECIFICATION:

"Selects a level according the user‘s education and stage"

END INFERENCE Abstract;

Select-level

INFERENCE Select-book

ROLES

INPUT: Genre, Level;

OUTPUT: Book;

STATIC: Book-selection-model;

SPECIFICATION:

"Assigns a book according the user‘s level and selected genres"

END INFERENCE Abstract;

Select-book

2)         领域链接

完成推理知识的建模之后,有必要来描述它们是如何与知识领域的元素进行连接的,如下图所示。

KNOWLEDGE-ROLE Person;

TYPE: DYNAMIC;

DOMAIN-MAPPING: Person;

END KNOWLEDGE-ROLE Person;

Person

KNOWLEDGE-ROLE Abstraction-model;

TYPE: STATIC;

DOMAIN-MAPPING:Abstraction-rules

  FROM literary-assistant-scheme; ;

END KNOWLEDGE-ROLE Abstraction-model;

Abstraction-model

KNOWLEDGE-ROLE Stage;

TYPE: DYNAMIC;

DOMAIN-MAPPING: Stage;

END KNOWLEDGE-ROLE Stage;

Stage

KNOWLEDGE-ROLE Interest;
TYPE: DYNAMIC;
DOMAIN-MAPPING: Interest;
END KNOWLEDGE-ROLE Interest;

Interest

KNOWLEDGE-ROLE Preferences-model;
TYPE: STATIC;
DOMAIN-MAPPING:Genre preferences
   FROM literary-assistant-scheme; ;
END KNOWLEDGE-ROLE Preferences-model;

Preferences-model

KNOWLEDGE-ROLE Genre;
TYPE: DYNAMIC;
DOMAIN-MAPPING: Genre;
END KNOWLEDGE-ROLE Genre;

Genre

KNOWLEDGE-ROLE Education;
TYPE: DYNAMIC;
DOMAIN-MAPPING: Education;
END KNOWLEDGE-ROLE Education;

Education

KNOWLEDGE-ROLE Stage;
TYPE: DYNAMIC;
DOMAIN-MAPPING: Education;
END KNOWLEDGE-ROLE Education;

Stage

KNOWLEDGE-ROLE Level-model;
TYPE: STATIC;
DOMAIN-MAPPING:Level-assignation
   FROM literary-assistant-scheme;
END KNOWLEDGE-ROLE Level-model;

Level-model

KNOWLEDGE-ROLE Level;
TYPE: DYNAMIC;
DOMAIN-MAPPING: Level;
END KNOWLEDGE-ROLE Level;

Level

KNOWLEDGE-ROLE Genre;
TYPE: DYNAMIC;
DOMAIN-MAPPING: Genre-and-Level;
END KNOWLEDGE-ROLE Genre;

Genre

KNOWLEDGE-ROLE Level;
TYPE: DYNAMIC;
DOMAIN-MAPPING: Genre-and-Level;
END KNOWLEDGE-ROLE Level;

Level

KNOWLEDGE-ROLE Book-selection-model;
TYPE: STATIC;
DOMAIN-MAPPING:Assign-book
   FROM literary-assistant-scheme;
END KNOWLEDGE-ROLE Book-selection-model;

Book-selection-model

KNOWLEDGE-ROLE Book;
TYPE: DYNAMIC;
DOMAIN-MAPPING: Book;
END KNOWLEDGE-ROLE Book;

Book

3. 任务知识

任务代表着一个总体目标,为了达到这个目标,我们使用‘method’来对基本任务进行子任务分解,使用‘control’对子任务在运行时进行排序。在对任务进行递归分解的时候,我们把不能继续分解的、位于叶子节点的子任务称为‘inferences’。‘control method’知识是最终实现一个任务的必要条件,它清晰地、精确地、明确地指明了链接到各个‘inferences’的过程。下图展示了任务、子任务分解和最终的‘inferences’:

TASK Literary-assistant

    GOAL:

        "Advice a book to a reader";

    ROLES:

        INPUT:

            Person: "A person who wants to read a book";

        OUTPUT:

            Book: "Some books to read";

    SPEC:

    "Assign a book to a person according to its education and age";

END TASK Literary-assistant;

TASK-METHOD Literary-assistant-sequential;

    REALIZES:

        "Literary assistant";

    DECOMPOSITION:

    INFERENCES: Abstract, Select-genre, Select-level, Select-book;

    TRANSFER-FUNCTIONS:;

    ROLES:

    INTERMEDIATE:

        Abstraction-model:

        Preferences-model:

        Level-model:

        Book-selection-model:

    CONTROL-STRUCTURE:

        Abstract(+Stage,-Person,-Abstraction-model);

        Select-genre(+Genre,-Interest,-Preferences-model);

        Select-level(+Level,-Education,-Stage,-Level-model);

        Select-Book(+Book,-Genre,-Level,-Book-selection-model);

END-TASK-METHOD Literary-assistant-sequential;

Literary-assistant

四、一个简单的实现

我们选择使用CLIPS来实现一个例子,CLIPS是起源于1985年的一个专家系统,具有以下的特性:

  • 知识表现:CLIPS内置了一个工具来处理各种各样的知识,支持三种不同的编程范式:基于规则的、基于对象的、过程式的。
  • 可移植性:为了高可移植性和运行速度,CLIPS使用C来实现,不需要任何程序的变化就可以安装在各种不同的操作系统上,已经经过测试的系统有:Windows XP, MacOS X和Unix。理论上,CLIPS可以被移植到任何有ANSI C和C++编译器的操作系统上面。CLIPS是完全开源的,可以进行修改或者裁剪来满足用户特殊的需求。
  • 集成/可扩展性:CLIPS能被内嵌在过程代码中,叫做子程序。支持的嵌入语言有:C、C++、Java、FORTAN和ADA。
  • 检查和验证:CLIPS通过内置的特性来支持专家系统的检查和验证,这些特性包括:模块设计、知识库的划分、函数参数和值的静态/动态检查、规则模式的语义分析等。
  • 丰富的文档。
  • 低成本:CLIPS是完全开源的软件。

下面是本文案例的全部源代码,基于CLIPS编写。

; Select level according to education

(defrule select_level

    ?f1<-(start_level)

    (person (education ?edu)(stage ?stg))

    (level (education ?edu)(stage ?stg)(level ?lev))

    =>

    (assert (reader-type (level ?lev)))

    (retract ?f1)

)

; Find interests in interest list

(deffunction has_person (?mat $?interests)

    (return (member$ ?mat $?interests))

)

; Select genre according to interests

(defrule select_genre

    (interests)

    (person (interests $?interests))

    (matter (interest $?cat)(genre ?genre))

    =>

    (bind ?i 1)

    (while (<= ?i (length$ $?interests))

        (bind ?mat (nth$ ?i $?interests))

        (if (has_person ?mat $?cat) then

            (assert (reading-type (genre ?genre)))

        )

    (bind ?i (+ ?i 1))

    )

)

; Select book according to interests

(defrule recommend_book

    (reader-type (level ?level))

    (reading-type (genre ?genre))

    (category (level ?level)(genre ?genre)(book ?book))

    =>

    (printout t "According to this data, you should read: " ?book crlf)

)

下图展示了使用CLIPS编写的应用的运行结果。

注意:如果输入了系统不能匹配的年龄或者受教育程度,系统将不会返回任何结果。例如:当你的年龄是50岁但是受教育程度是‘幼儿园’时,系统将不会给你推荐任何的图书。

五、内嵌C++

下面的代码展示了如何将CLIPS内嵌到C++的项目中。

#include <iostream>

extern "C"
{
    #include "clips.h"
}

using namespace std;

int main(int argc, char* argv[])
{
    InitializeEnvironment();
    Load("literary assistant.clp");
    // Insert the CLIPS source code here

    Reset();
    Run(-1L);
    cin.get();
    return 0;
}

六、进一步阅读和引用

  • Knowledge engineering and management: the CommonKADS methodology. [Guus Schreiber][ Hans Akkermans][Anjo Anjewierden][Robert de Hoog][Nigel Shadbolt] et al. Massachusetts Institute of Technology.
  • http://www.csae.map.es/csi/silice/Sgexpt.html. [Consejo Superior de Administración Electrónica - Government of Spain]
  • Basic aspects of Artificial Intelligence. [J. Mira][A.E. Delgado][ J.G. Boticario][ F.J. Diez]. UNED - National University for Distance Education.
  • Methodological aspects of KBS development. [J. Mira][R. Martínez Tomás]. UNED - National University for Distance Education.
  • CLIPS: a tool for building expert systemshttp://clipsrules.sourceforge.net/.
时间: 2024-08-03 10:18:53

基于CommonKADS方法论实现知识库系统的相关文章

环境企业表单权限分配填报数据系统设计与实现

本科生毕业论文(设计) Undergraduate Graduation Thesis(Design) 题目Title:环境企业表单权限分配填报数据   系统设计与实现                 院 系 School (Department):数据科学与计算机学院  专 业 Major:   软件工程   学生姓名 Student Name:                     学 号 Student No.:                    指导教师(职称) Superviso

深度 | 邢波教授谈人工智能科学路径:为人工智能装上「无穷动」引擎

深度 | 邢波教授谈人工智能科学路径:为人工智能装上「无穷动」引擎 本文由邢波教授 授权转载 微信公众号:猫匣子 作者:邢波 有些人是因为对人工智能的原理不理解而导致,有些人是为了个人名望而宣扬人工智能威胁论,有些人则是为了商业的利益推动人工智能威胁论.——Yann LeCun   人工智能算法本身这个计算任务像登山,它是有明确的目标的,可以用数学描述和比较的目标,它本身有弹性.容错性.随机性.和客观的量化的可评估性 … 人工智能功能的提升和突破来源于理论模型,算法,和计算引擎的不断创新,缺一不

[转载]从业务运维转到产品经理,我摸爬滚打的产品之路

作者:李光 (腾讯运营规划高级工程师与产品经理) 导言:在工作中你是否遇到过困惑和迷茫的时期,总是有解决不完的问题,救不完的火,总在反复单调的做着同样的事情,担心自己会被时代给淹没,会被时代给抛弃,运维这样的工作是不是也能转型升级?下面我们一起看看腾讯应用运维工程师的产品经理转型升级之路吧!其实~只要功夫深,铁杵磨成针,工作中积累了足够的经验,转型升级也是能实现的~ 写这篇文章的初衷是想总结下自己从业务运维岗转到产品经理岗后,大半年来如何从“零”开始的一路蛋疼的摸爬滚打过来的经历,同时作为一个新

电视人的焦虑:当ott抢了电视台的风头,电视业的渠道建设该往哪里走

"未来媒体的最大价值将是渠道和内容之争."百视通吸收合并东方明珠的投资者交流会上,上海文广掌舵人黎瑞刚说的这句话,与其将其视为陈述句,不如看成疑问句.这句话的背后,其实在问一个烂俗且早已有了毋庸置疑答案的问题--渠道有价值,还是内容有价值? 现阶段的电视业更紧迫的问题已经不再是单纯的内容问题 近几年,电视业对内容的投资和规划虽然不遗余力,甚至绝大部分精力和资源都向内容聚拢,但是进入到2014年后,一个越来越清晰的市场局面是,电视业更为紧迫的问题已然不是单纯的内容问题.原因在于,电视对内

数字电路建模 - jchdl

jchdl:Jianchang Constructed Hardware Description Library,使用Java语言开发的硬件描述库.(Java是商标不让用,那就用名字 :-) 一. 设计目标 1.设计目标 打通IC开发和Java生态,以Java生态的赋能IC开发. 2. 当前路径 当前的路径是基于Java语言,建立硬件建模库(library).使用jchdl建立硬件模型之后,可以直接进行功能验证.然后转换为Verilog语言,使用现有的工具集对转换后的模型进行验证.仿真等. ??

华为企业服务:数字化运营新主张,企业上云新标配

2018年7月,工信部发布了<推动企业上云实施指南(2018-2020年)>(以下简称:企业上云指南2018),指出:到2020年,力争实现企业上云环境进一步优化,行业企业上云意识和积极性明显提高,上云比例和应用深度显著提升,云计算在企业生产.经营.管理中的应用广泛普及,全国新增上云企业100万家,形成典型标杆应用案例100个以上. 从去年的<云计算发展三年行动计划(2017-2019年)>到今年的<企业上云指南2018>,国家加大了推动企业运用云计算加快数字化.网络化

大数据项目实践:基于hadoop+spark+mongodb+mysql开发医院临床知识库系统

一.前言 从20世纪90年代数字化医院概念提出到至今的20多年时间,数字化医院(Digital Hospital)在国内各大医院飞速的普及推广发展,并取得骄人成绩.不但有数字化医院管理信息系统(HIS).影像存档和通信系统(PACS).电子病历系统(EMR)和区域医疗卫生服务(GMIS)等成功实施与普及推广,而且随着日新月异的计算机技术和网络技术的革新,进一步为数字化医院带来新的交互渠道譬如:远程医疗服务,网上挂号预约. 随着IT技术的飞速发展,80%以上的三级医院都相继建立了自己的医院信息系统

基于oracle的sql优化方法论

Oracle数据库里SQL优化的终极目标就是要缩短目标SQL语句的执行时间.要达到上述目的,我们通常只有如下三种方法可以选择: 1.降低目标SQL语句的资源消耗: 2.并行执行目标SQL语句: 3.平衡系统的资源消耗. "方法1:降低目标SQL语句的资源消耗"以缩短执行时间,这是最常用的SQL优化方法.这种方法的核心是要么通过在不更改业务逻辑的情况下改写SQL来降低目标SQL语句的资源消耗,要么不改SQL但通过调整执行计划或相关表的数据来降低目标SQL语句的资源消耗. 方法2:并行执行

基于UVM的verilog验证

Abstract 本文介绍UVM框架,并以crc7为例进行UVM的验证,最后指出常见的UVM验证开发有哪些坑,以及怎么避免. Introduction 本例使用环境:ModelSim 10.2c,UVM-1.1d,Quartus II 13.1(64 bit),器件库MAX V 1. UVM介绍 对UVM结构熟悉的读者可跳过本节. 叫UVM“框架”可能并不确切(只是便于理解,可类比软件界的“框架”).UVM全称为通用验证方法论.在硬件开发过程中,验证是十分重要的环节.可以说,左手开发,右手验证.